Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++

  1. C++에서 i < j 조건을 만족하는 고유 쌍(arr[i], arr[j])의 개수 구하기

    정수 요소로 구성된 배열이 주어졌을 때, (arr[i], arr[j]) 형태의 쌍 중에서 인덱스 조건 i < j를 만족하면서 값의 중복이 없는 고유한 쌍의 개수를 구하는 것이 목표입니다.예제로 이해하기입력 − arr[] = {1, 2, 3};출력 − i < j인 고유 쌍 (arr[i], arr[j])의 개수 − 3설명 − 모든 요소가 고유하므로 가능한 쌍은 다음과 같습니다.(1,2) - ( arr[0], arr[1] ) 0<1 (1,3) - ( arr[0], arr[2] ) 0<2 (2,3) - ( arr[1]

  2. C++에서 (n XOR x) = (n − x)를 만족하는 x ≤ n 값의 개수 구하기

    숫자 n이 입력으로 주어지면, 조건 (n XOR x) = (n − x)를 만족하는 값 x의 개수를 구하는 것이 목표입니다. 이때 x는 [0, n] 범위 안에 있어야 합니다. 예제로 이해하기 입력 − n = 10 출력 − (n XOR x) = (n − x)를 만족하는 x ≤ n 값의 개수: 4 설명 − 10 xor x = 10 − x를 만족하는 x의 값은 0, 2, 8, 10입니다. 입력 − n = 15 출력 − (n XOR x) = (n − x)를 만족하는 x ≤ n 값의 개수: 16 설명 − 15 xor x = 15 − x를 만족

  3. C++에서 최댓값이 K보다 큰 부분 배열의 개수 구하기

    정수 요소로 이루어진 배열 arr[]와 변수 k가 주어졌을 때, 최댓값이 k보다 큰 부분 배열(subarray)의 개수를 구하는 것이 목표입니다. 예를 들어 배열이 [1, 2, 3]이고 k가 1이라면, 만들 수 있는 부분 배열은 [1], [2], [3], [1,2], [2,3], [1,2,3]으로 총 6개입니다. 이 가운데 최댓값이 1보다 큰 부분 배열은 [2], [3], [1,2], [2,3], [1,2,3]의 5개이므로 정답은 5가 됩니다. 예제로 이해하기 입력 − arr[] = {1, 2, 5, 3}, k = 3 출력 − 최

  4. C++로 구현하기: 'a', 'b', 'c' 세 문자를 모두 포함하지 않는 부분 문자열 개수 구하기

    문제 소개문자열 str[]이 주어지며, 이 문자열은 a, b, c 세 문자만으로 구성되어 있습니다. 우리의 목표는 이 세 문자가 모두 포함되지 않은 부분 문자열(substring)의 개수를 구하는 것입니다. 예를 들어 어떤 문자열에 대해 a, b, c, abb, bba, bc, ca, ccc와 같은 부분 문자열은 유효하지만, a, b, c 세 문자가 모두 들어 있는 abc, bcca, cab 같은 부분 문자열은 제외됩니다.예제를 통해 자세히 살펴보겠습니다.입력 − str[] = aabc출력 − {a, b, c} 세 문자를 동시에 포

  5. C++에서 문자 X를 최소 한 번 포함하는 부분 문자열 개수 구하기

    문제 정의 문자열 str과 문자 X가 주어졌을 때, X를 최소 한 번 이상 포함하는 부분 문자열(substring)의 개수를 구하는 것이 이 글의 목표입니다. 예를 들어 str이 “abc”이고 X가 ‘a’라면, 조건을 만족하는 부분 문자열은 “a”, “ab”, “abc”로 총 3개입니다. 예제 1 입력: str = “aabccd”, X = ‘c’ 출력: 14 설명: ‘c’를 하나 이상 포함하는 부분 문자열은 “c”, “c”, “bc”, “cc”, “cd”, “abc”, “bcc”, “ccd”, “aabc”, “abcc”, “bcc

  6. C++로 문자열에서 만들 수 있는 길이 n의 부분 문자열 개수 구하기

    문자열 str[]과 정수 n이 주어졌을 때, 우리의 목표는 str[]에서 길이가 n인 모든 부분 문자열을 찾아 그 개수를 구하는 것입니다. 예를 들어 문자열이 abcde이고 n=3이라면, 길이가 3인 부분 문자열은 abc, bcd, cde로 총 3개가 됩니다. 예시로 이해하기 입력 − str[] = computer, n = 4 출력 − 주어진 문자열에서 만들 수 있는 길이 n의 부분 문자열 개수: 5 설명 − 길이가 4인 부분 문자열은 comp, ompu, mput, pute, uter 입니다. 입력

  7. C++에서 정확히 K개의 1을 포함하는 이진 문자열의 부분 문자열 개수 구하기

    문제 소개0과 1로만 이루어진 이진 문자열과 정수 k가 주어졌을 때, 정확히 k개의 1을 포함하는 부분 문자열의 개수를 계산하는 것이 이번 문제의 목표입니다.입력 − string str = 10000100000, k = 2출력 − K개의 1을 포함하는 이진 문자열의 부분 문자열 개수: 6설명 − 주어진 문자열에는 1이 두 개(인덱스 0과 5) 존재합니다. 두 1을 모두 포함하는 부분 문자열은 시작 위치를 첫 번째 1 또는 그 앞의 0 중 하나로, 끝 위치를 두 번째 1 또는 그 뒤의 0 중 하나로 선택하는 경우의 수와 같으므로 총

  8. C++ – 배열에서 한 요소의 빈도가 다른 요소의 값 이상인 쌍 개수 구하기

    문제 개요양의 정수로 이루어진 배열 arr[]가 주어졌을 때, 배열의 두 요소로 만들 수 있는 쌍 (A, B) 가운데 A가 등장하는 횟수(빈도)가 B 이상이고 동시에 B가 등장하는 횟수가 A 이상인 쌍의 개수를 구하는 것이 목표입니다.예제를 통해 자세히 살펴보겠습니다.입력 − int arr[] = { 3, 3, 3, 5, 5, 6, 6 }출력 − 조건을 만족하는 쌍의 개수: 1설명 − 이 배열에서 3은 정확히 3번 등장합니다. 따라서 쌍 (3, 3)은 3이 3번 이상 등장한다는 조건을 만족하는 유일한 유효한 쌍이며, 결과는 1이 됩

  9. C++에서 p가 배열에 최소 q번, q가 최소 p번 등장하는 쌍(p, q) 세기

    문제 소개양의 정수로 이루어진 배열이 주어졌을 때, 배열 arr[]의 요소들 중에서 다음 조건을 만족하는 쌍(p, q)의 개수를 구하는 것이 목표입니다.조건: p가 배열에서 최소 q번 이상 등장하고, 동시에 q가 배열에서 최소 p번 이상 등장해야 합니다.구체적인 예제를 통해 살펴보겠습니다.예제 1입력 − int arr[] = { 3, 3, 3, 5, 5, 6, 6 }출력 − 조건을 만족하는 쌍의 개수: 1설명 − 숫자 3이 배열에서 정확히 3번 등장하므로 (3, 3)이 유효한 쌍이 됩니다. 다른 숫자

  10. C++에서 각 문자를 최대 한 번씩 사용해 다른 문자열로부터 만들 수 있는 문자열 개수 구하기

    두 개의 문자열 str_1과 str_2가 주어졌을 때, str_1에 포함된 문자들을 각각 최대 한 번씩만 사용하여 str_2를 온전히 몇 세트 만들어 낼 수 있는지 개수를 계산하는 문제입니다. 즉, str_1의 문자를 중복 없이 소진해 가면서 str_2가 총 몇 번 완성되는지 확인해야 합니다. 입력 · 출력 예시 예제 1 입력 - str_1 = technical learning, str_2 = learning 출력 - 각 문자를 최대 한 번씩 사용하여 다른 문자열로부터 만들 수 있는 문자열의 개수: 1 설명 - str_2인 lear

  11. C++로 요소를 재배열해 회문을 만들 수 있는 하위 배열 개수 구하기

    문제 소개정수로 이루어진 배열이 주어졌을 때, 해당 배열에서 만들 수 있는 모든 하위 배열(sub-array) 중에서 요소들을 재배열했을 때 유효한 회문(palindrome)을 형성할 수 있는 하위 배열의 개수를 계산하는 것이 이번 문제의 목표입니다. 회문이란 앞에서부터 읽으나 뒤에서부터 읽으나 동일하게 배치된 시퀀스를 의미합니다.입력 − int arr[] = { 3, 3, 1, 4, 2, 1, 5 }출력 − 요소를 재배열하여 회문을 만들 수 있는 하위 배열의 개수: 9설명 − 회문으로 재배열 가능한

  12. C++로 이진 문자열에서 'ab' 패턴 제거하기: 필요한 연산 횟수 계산 방법

    이 문제에서는 a와 b로만 구성된 문자열이 주어지며, 문자열에서 ab 패턴이 완전히 사라질 때까지 필요한 연산 횟수를 계산해야 합니다. 여기서 한 번의 연산은 문자열 속의 ab를 bba로 교체하는 것을 의미합니다. 따라서 먼저 문자열에 ab가 포함되어 있는지 확인한 후, 포함되어 있다면 교체 작업을 반복하여 문자열을 ab가 없는 상태(ab-free)로 만들어야 합니다. 입력 − str = ababaa 출력 − 이진 문자열을 ab 프리로 만들기 위한 연산 횟수 − 4 설명 − 문자열에서 ab 패턴이 발견될 때마다 이를 bba로 교체

  13. C++로 균형 잡힌 괄호 시퀀스 쌍의 개수 계산하기

    괄호로만 이루어진 문자열들이 주어졌을 때, 이들을 서로 짝지어 균형이 맞는(balanced) 괄호 시퀀스를 몇 쌍 만들 수 있는지 계산하는 것이 이번 문제의 목표입니다. 여기서 균형이 맞는다는 것은 여는 괄호 (와 닫는 괄호 )의 개수가 서로 같다는 의미입니다. 단, 한 번 사용된 괄호 문자열은 다른 쌍을 만들 때 다시 사용할 수 없습니다. 입력·출력 예시 입력 − string paran[] = { )()()), (, )(, )(, ) } 출력 − 균형 잡힌 괄호 시퀀스 쌍의 개수: 1 설명 − 각

  14. C++에서 그리드 내 주어진 방향으로 이동 가능한 횟수 계산하기

    n × m 크기의 그리드와 시작 지점(x, y)을 나타내는 두 변수 n과 m이 주어집니다. 또한 그리드 내부를 탐색할 때 사용할 수 있는 이동(move) 쌍, 예를 들어 (1,1), (2,2) 같은 형태가 주어집니다. 각 이동 쌍은 x축과 y축으로 이동하는 단위 걸음 수를 의미합니다. 목표는 경계 [1, n] × [1, m] 범위 안에서 그리드 내부를 이동하며 취할 수 있는 총 걸음 수를 구하는 것입니다. 예를 들어 n이 5, m이 4이고 현재 위치가 (2, 2)일 때 선택한 이동이 (1, -1)이라면, 이 이동을 한 번 적용하면

  15. C++로 푸는 감소 후 증가하는 순열 개수 문제: 이항정리 활용법

    문제 정의변수 num이 주어졌을 때, 1부터 num까지의 숫자를 사용해 만들 수 있는 순열 중에서 처음에는 감소하다가 이후에는 증가하는 순열의 개수를 구하는 것이 목표입니다. 예를 들어 num=3이라면 사용할 수 있는 숫자는 1, 2, 3이고, 조건을 만족하는 순열은 [3, 1, 2]와 [2, 1, 3] 두 가지이므로 정답은 2가 됩니다.핵심 아이디어: 숫자 1의 위치모든 순열에서 감소가 증가로 바뀌는 전환점은 최솟값인 1의 위치에 의해 결정됩니다. 1 다음에 오는 숫자들은 항상 증가하기 때문입니다. 따라서 순열이 감소 후 증가 형

  16. C++로 합이 소수이면서 n보다 작은 숫자 쌍의 개수 구하기

    문제 개요양의 정수 n이 입력으로 주어졌을 때, 각 쌍의 합(i+j)이 소수이면서 n보다 작고, i != j이며 i와 j가 모두 1 이상이라는 조건을 만족하는 모든 숫자 쌍 (i, j)의 개수를 구하는 것이 목표입니다.예를 들어 n이 4라면 가능한 쌍은 (1, 2) 하나뿐입니다. 1+2=3은 소수이고 4보다 작으며, 1과 2는 모두 1 이상이기 때문입니다.예제로 이해하기입력 − n=7출력 − 합이 소수이고 n보다 작은 쌍의 개수: 3설명 − 가능한 쌍은 (1, 2), (1, 4), (2, 3)입니다. 각각의 합인 3, 5, 5는 모

  17. C++에서 i번째 문자를 주어진 단어의 (i-1)번째, i번째 또는 (i+1)번째 문자로 바꿀 수 있는 단어의 개수 구하기

    문자열 str[]이 입력으로 주어졌을 때, 우리의 목표는 str[]과 길이가 같으면서 각 위치의 문자가 원래 단어의 (i-1)번째, i번째 또는 (i+1)번째 문자로 대체될 수 있는 단어의 개수를 세는 것입니다.단, 첫 번째 문자는 i번째 또는 (i+1)번째 위치의 문자로만 대체할 수 있고, 마지막 문자는 (i-1)번째 또는 i번째 위치의 문자로만 대체할 수 있습니다.예제를 통해 자세히 이해해 보겠습니다.입력 − str[] = TPP출력 − i번째 문자가 주어진 단어의 (i-1)번째, i번째 또는 (i+1)번째 문자가 될 수 있는

  18. C++로 이진 행렬을 모두 0으로 만드는 최소 연산 횟수 구하기

    문제 소개 이진 행렬(binary matrix)이 하나 주어져 있다고 가정해 보겠습니다. 여기서 말하는 연산이란 행렬의 한 칸(셀)을 선택했을 때, 그 셀 자신과 상·하·좌·우에 인접한 셀들을 한 번에 뒤집는(0 ↔ 1) 작업을 의미합니다. 우리가 구해야 할 것은 이런 연산을 반복하여 행렬의 모든 원소를 0으로 만들기 위한 최소 연산 횟수이며, 아무리 연산해도 모든 원소를 0으로 만들 수 없다면 -1을 반환해야 합니다. 예를 들어 입력 행렬이 다음과 같다고 합시다. 00 10 이 경우 필요한 최소 연산 횟수는 3입니다.

  19. C++ 프로그램: 숫자 목록을 재배열해 가장 큰 수 만들기

    nums라는 숫자 목록이 주어질 때, 요소들의 순서를 재배열하여 만들 수 있는 가장 큰 수를 찾고, 그 결과를 문자열 형태로 반환해야 합니다. 예를 들어, 입력이 nums = [20, 8, 85, 316]이라면, 순서를 적절히 조합했을 때 가장 큰 수는 88531620이므로 출력 역시 88531620이 됩니다. 문제 접근 방법 이 문제는 다음과 같은 단계를 거쳐 해결할 수 있습니다. 임시 배열 temp를 하나 정의합니다. nums의 각 요소 i에 대해 다음을 수행합니다. i를 문자열로 변환한 뒤 temp에 삽입합니다. te

  20. C++로 주어진 배열을 구성하기 위한 접미사 증가/감소 연산 횟수 구하기

    양의 정수로 이루어진 목표 배열 arr[]가 주어졌을 때, 모든 요소가 0으로 초기화된 배열에서 출발하여 이 목표 배열을 만들어야 합니다. 이때 사용할 수 있는 연산은 접미사(suffix) 증가/감소 연산입니다.연산의 정의접미사 증가 연산: 임의의 인덱스 i를 선택하면, 인덱스 i부터 배열의 마지막 인덱스까지 모든 요소에 1을 더합니다.접미사 감소 연산: 임의의 인덱스 i를 선택하면, 인덱스 i부터 배열의 마지막 인덱스까지 모든 요소에서 1을 뺍니다.예제로 이해하기예제 1입력: arr[] = { 1, 2, 3 }출력: 주어진 배열을

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:232/300  20-컴퓨터/Page Goto:1 226 227 228 229 230 231 232 233 234 235 236 237 238