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

C++

  1. C++로 BST 전위 순회 결과에서 루트보다 작은 요소 개수 구하기

    이진 탐색 트리(BST)의 전위 순회(preorder traversal) 결과가 주어졌을 때, 루트보다 작은 요소의 개수를 찾는 문제를 다뤄보겠습니다.전위 순회에서는 트리의 루트를 가장 먼저 방문하기 때문에, 순회 결과의 첫 번째 요소가 곧 BST의 루트입니다. 이 특성만 활용하면 간단하게 해결할 수 있습니다. 예제를 통해 살펴보겠습니다.입력preorder_result = [5, 4, 2, 1, 7, 6, 8, 9]출력3루트는 첫 번째 요소인 5이며, 5보다 작은 요소는 4, 2, 1로 총 3개입니다.알고리즘전위 순회 결과를 배열에

  2. C++로 숫자 문자열에서 짝수 부분 문자열 개수 구하기

    숫자로만 이루어진 문자열이 주어졌을 때, 그 안에서 만들 수 있는 짝수 부분 문자열의 개수를 구하는 문제입니다. 예제를 통해 살펴보겠습니다.입력num = 1234출력6주어진 문자열에서 만들 수 있는 짝수 부분 문자열은 다음과 같습니다.2124342341234핵심 아이디어어떤 수가 짝수인지 아닌지는 오직 마지막 자릿수에 의해서만 결정됩니다. 따라서 특정 위치의 숫자가 짝수라면, 그 위치를 끝으로 하는 모든 부분 문자열은 반드시 짝수가 됩니다. 인덱스 i(0부터 시작)에 있는 숫자가 짝수일 때, 그 위치를 끝으로 하는 부분 문자열은 정

  3. C++로 이진 문자열을 교대 패턴으로 만드는 최소 뒤집기 횟수 구하기

    예를 들어 이진 문자열 10011이 주어졌다고 가정해 보겠습니다. 이 문자열을 교대(alternate) 패턴의 이진 문자열로 만들려면 최소 2개의 문자를 뒤집어 10101로 바꿔야 합니다. 문제 접근 방법 교대 이진 문자열에는 두 가지 가능한 형태가 있습니다. 0으로 시작하는 경우(01010...)와 1로 시작하는 경우(10101...)입니다. 따라서 두 경우 각각에 대해 필요한 뒤집기 횟수를 계산한 뒤, 그중 더 작은 값을 반환하면 됩니다. 구체적인 예를 통해 살펴보겠습니다. 입력 binary = 10011 출력 2 문자열을 0으

  4. C++로 N개의 자석에서 형성되는 자석 그룹 개수 구하기

    문제 개요자석을 표현하는 숫자에서 1은 양극(N극)을, 0은 음극(S극)을 의미합니다.각 자석은 두 개의 극을 가지며, 10 또는 01의 형태로 표현됩니다. 서로 이끌어당기는(인력이 작용하는) 자석들은 하나의 그룹을 이룰 수 있으며, 서로 마주 보는 면의 극이 다른 자석들이 같은 그룹에 속하게 됩니다.여기서 N개의 자석이 주어졌을 때, 이 자석들로 형성할 수 있는 그룹의 개수를 구해야 합니다.핵심 규칙은 간단합니다. 서로 다른 자석이 나란히 배치될 때마다 새로운 그룹이 형성되며, 이 경우 그룹 개수를 하나씩 증가시키면 됩니다.예시입

  5. C++로 구현하는 3으로 나누어 떨어지는 크기 2·3 그룹 개수 찾기

    문제 소개숫자로 이루어진 배열이 주어졌을 때, 원소의 합이 3으로 나누어 떨어지는 크기 2와 크기 3의 그룹이 각각 몇 개 존재하는지 구해야 합니다. 해결 방법은 간단합니다. 배열에서 두 개씩, 세 개씩 원소를 조합하여 각 그룹의 합을 계산하고, 그 합이 3으로 나누어 떨어지는지 확인하면 됩니다.먼저 예시를 살펴보겠습니다.입력arr = [1, 2, 3, 4]출력4합이 3으로 나누어 떨어지는 조합은 다음과 같이 총 4개입니다.[1, 2] → 합 = 3 [2, 4] → 합 = 6 [1, 2, 3] → 합 = 6 [2, 3, 4] → 합

  6. C++로 배열의 주어진 범위에서 인접한 동일 요소 개수 세는 방법

    배열과 인덱스 범위가 주어졌을 때, 해당 범위 안에서 서로 인접하면서 값이 같은 요소가 몇 개 있는지 세는 문제입니다. 이 문제는 단순 반복문 하나로 효율적으로 해결할 수 있습니다.먼저 예시를 통해 문제를 이해해 보겠습니다.예시입력arr = [1, 2, 2, 2, 3, 3, 4] lower = 1 upper = 5출력3인덱스 1부터 5 사이에서 인접한 요소들을 비교하면, (2, 2), (2, 2), (3, 3)으로 총 3쌍이 같은 값을 가지므로 결과는 3이 됩니다.알고리즘배열과 탐색할 인덱스 범위(lower, upper)를 초기화합

  7. C++로 이진수 표현에서 세트 비트 개수가 홀수인 정수의 개수 구하기

    숫자 n이 주어졌을 때, 1부터 n까지의 정수 중 이진수 표현에서 세트 비트(set bit, 값이 1인 비트)의 개수가 홀수인 정수가 몇 개 있는지 구하는 문제입니다. 예시를 통해 살펴보겠습니다.입력n = 10출력51부터 10 사이에는 이진수 표현에서 세트 비트 개수가 홀수인 정수가 총 5개 존재합니다. 실제로 확인해 보면 1(1), 2(10), 4(100), 7(111), 8(1000)이 해당됩니다.알고리즘숫자 N을 초기화합니다.이진수 형태에서 세트 비트의 개수를 세는 함수를 작성합니다.결과를 저장할 카운트 변수를 0으로 초기화합

  8. C++로 두 점 사이의 정수 좌표점 개수 구하기

    이 튜토리얼에서는 C++를 사용하여 주어진 두 점 사이에 존재하는 정수 좌표점(격자점)의 개수를 구하는 프로그램을 작성해 보겠습니다. 핵심 아이디어 두 점 사이의 정수점 개수는 다음 공식으로 간단하게 계산할 수 있습니다. gcd(abs(x1 - x2), abs(y1 - y2)) - 1 여기서 gcd는 최대공약수(greatest common divisor)를 의미합니다. 다만, 두 점을 잇는 선분이 좌표축에 평행한 특수한 경우에는 아래와 같이 따로 처리해야 합니다. x축에 평행한 경우: 두 점의 y좌표가 같으므로 정수점 개수는 a

  9. C++로 방정식 x1 + x2 + … + xn = k의 정수 해 개수 구하기

    방정식 x1 + x2 + … + xn = k의 정수 해의 개수를 구하는 문제는 조합론의 별과 막대(stars and bars) 기법으로 간단하게 해결할 수 있습니다.핵심 공식음이 아닌 정수 해(변숫값이 0 이상인 경우)의 개수는 C(n+k−1, k) 입니다.양의 정수 해(변숫값이 1 이상인 경우)의 개수는 C(k−1, n−1) 입니다.문제에서 제한 조건 없이 모든 정수 해를 요구한다면, 위 두 가지 경우의 수를 더하면 됩니다.예제입력n = 4k = 7출력140n = 4, k = 7일 때 음이 아닌 정수 해의 개수는 C(10, 7)

  10. C++로 문자열에서 각 문자 오른쪽의 더 큰 요소 개수 구하기

    문자열이 주어졌을 때, 각 문자의 오른쪽에 있는 더 큰 문자의 개수를 세는 것은 코딩 테스트에서 자주 등장하는 기본적인 문제입니다. 예시를 통해 자세히 살펴보겠습니다.입력string = abc출력2 1 0a의 오른쪽에는 a보다 큰 문자가 2개(b, c) 있으므로 결과는 2입니다.b의 오른쪽에는 b보다 큰 문자가 1개(c) 있으므로 결과는 1입니다.c의 오른쪽에는 c보다 큰 문자가 없으므로 결과는 0입니다.알고리즘문자열을 초기화합니다.각 문자의 개수를 저장할 배열을 초기화합니다.두 개의 중첩 반복문을 사용해 문자열을 순회합니다.한 번

  11. C++로 숫자의 이진 표현에서 선행 0 개수 구하기

    문제 개요주어진 숫자의 이진(binary) 표현에서 선행 0(leading zeroes)의 개수를 구하는 문제입니다. 이때 전체 비트 수는 32비트라고 가정합니다.예를 들어 살펴보겠습니다.입력5출력29숫자 5의 이진 표현은 00000...00101입니다. 실제로 값이 채워진 비트는 맨 뒤의 3개뿐이므로, 나머지 앞부분에 해당하는 선행 0은 총 29개입니다.알고리즘숫자 n을 초기화합니다.n의 이진 표현을 구합니다.전체 비트 수(32)에서 n의 이진 표현 길이를 뺍니다.계산된 결과를 반환합니다.구현다음은 위 알고리즘을 C++로 구현한

  12. C++로 N-진 트리(N-ary Tree)의 각 노드 하위 트리에 포함된 리프 노드 개수 구하기

    개요이 튜토리얼에서는 N-진 트리(n-ary tree)에서 모든 노드의 하위 트리에 속한 리프 노드(leaf node)의 개수를 구하는 프로그램을 작성해 보겠습니다.N-진 트리가 주어졌을 때, 각 노드를 루트로 하는 하위 트리에 포함된 리프 노드의 수를 계산해야 합니다. 먼저 예시를 통해 문제를 살펴보겠습니다.입력N = 8 tree = [[2, 3], [], [4, 5, 6], [7, 8], [], [], [], []]출력1->5 2->1 3->4 4->2 5->1 6->1 7->1 8->

  13. C++로 순열 추측에 필요한 이동 횟수 계산하기

    자연수 N이 주어졌을 때, 최악의 경우 순열(permutation)을 완전히 추측하는 데 필요한 이동 횟수를 구하는 것이 이 글의 목표입니다. 순열의 각 위치를 차례대로 확인하며 가능한 모든 경우를 고려하면, 필요한 총 이동 횟수는 아래와 같은 규칙으로 계산할 수 있습니다.핵심 아이디어는 간단합니다. 1부터 n까지의 각 i에 대해 i × (n − i)를 모두 더한 뒤, 마지막에 n을 한 번 더해 주면 됩니다.예시입력:9출력:129n이 9일 때 각 항을 계산하면 8 + 14 + 18 + 20 + 20 + 18 + 14 + 8 + 0

  14. C++로 구현하는 n자리 스테핑 넘버(Stepping Number) 개수 세기

    스테핑 넘버(Stepping Number)란 인접한 두 자릿수의 차이가 정확히 1인 숫자를 말합니다. 예를 들어 123, 321, 121 같은 숫자가 여기에 해당합니다. 자릿수 n이 주어졌을 때, n자리 스테핑 넘버가 총 몇 개 있는지 구하는 문제를 C++로 해결해 보겠습니다.문제 예시입력2출력172자리 숫자 중 가장 작은 수는 10, 가장 큰 수는 99입니다. 이 범위 안에는 12, 23, 34, 45, 56, 67, 78, 89, 98 등 총 17개의 스테핑 넘버가 존재합니다.알고리즘자릿수 n을 초기화합니다.개수를 저장할 변수

  15. C++로 구현하는 오른쪽에 있는 더 큰 요소(NGE) 개수 세기

    배열과 특정 요소의 인덱스가 주어졌을 때, 그 요소의 오른쪽에 위치하면서 값이 더 큰 요소가 몇 개인지 세는 문제를 풀어보겠습니다. 이러한 요소는 흔히 NGE(Next Greater Element)라고 불립니다.문제 예시입력arr = [2, 3, 5, 1, 4, 2, 6] index = 3출력3인덱스 3에 해당하는 대상 요소는 1입니다. 이 요소의 오른쪽에는 4, 2, 6 총 세 개의 요소가 있으며, 모두 1보다 큰 값입니다. 따라서 정답은 3이 됩니다.알고리즘 접근 방법이 문제는 단순한 선형 탐색으로 해결할 수 있습니다. 절차는

  16. C++로 구현하는 n-ary 트리에서 주어진 값보다 큰 노드 개수 세기

    n-ary 트리와 하나의 숫자가 주어졌을 때, 해당 숫자보다 큰 값을 가진 노드의 개수를 세는 문제입니다. 트리를 순회하면서 조건에 맞는 노드만 카운트하면 되므로, 재귀 호출을 활용하면 간단하게 해결할 수 있습니다.먼저 예제를 통해 문제를 이해해 보겠습니다.입력tree = [[4], [1, 2], [3, 5]] n = 2출력3위 트리에서 값이 2(n)보다 큰 노드는 3개입니다.알고리즘n-ary 트리를 초기화합니다.카운트 변수를 0으로 초기화합니다.현재 노드의 값이 n보다 크면 카운트를 1 증가시킵니다.현재 노드의 모든 자식 노드를

  17. C++로 합 방정식 x + y + z = n의 음이 아닌 정수 해 개수 구하기

    이번 튜토리얼에서는 합 방정식(sum equation)의 음이 아닌 정수(non-negative integer) 해가 총 몇 개인지 구하는 프로그램을 C++로 작성해 보겠습니다.문제에서 다루는 방정식은 다음과 같습니다.x + y + z = n자연수 n이 주어졌을 때, 이 방정식을 만족하는 음이 아닌 정수(x, y, z ≥ 0) 조합이 몇 가지 존재하는지 찾아야 합니다. 예제를 통해 살펴보겠습니다.입력 및 출력 예시입력2출력6n = 2일 때 가능한 해는 다음 6가지입니다.0 0 20 1 10 2 01 0 11 1 02 0 0알고리즘가

  18. C++로 선형 방정식 y = mx + c를 만족하는 순서쌍 개수 구하기

    직선의 방정식 y = mx + c가 주어졌을 때, 배열에 있는 값들로 만들 수 있는 순서쌍(ordered pair) 중 이 방정식을 만족하는 쌍의 개수를 구하는 문제입니다. 배열과 기울기 m, 절편 c가 입력으로 주어지며, 조건을 만족하는 순서쌍의 개수를 출력해야 합니다.먼저 예시를 통해 문제를 살펴보겠습니다.입력 예시arr = [1, 2, 3] m = 1 c = 1출력 예시2위 예시에서 방정식 y = x + 1을 만족하는 순서쌍은 다음과 같습니다.(2, 1) (3, 2)배열의 각 원소를 x값으로 대입했을 때, 결과인 y값도 같은

  19. C++로 구현하는 합이 K로 나누어지는 처음 N개의 자연수 쌍의 개수 구하기

    두 개의 숫자 N과 K가 주어졌을 때, 1부터 N까지의 자연수 중에서 서로 다른 두 수의 합이 K로 나누어지는 쌍(pair)의 개수를 세는 문제입니다. 예시를 통해 살펴보겠습니다.입력N = 3K = 2출력1합이 K로 나누어지는 쌍은 (1, 3) 하나뿐입니다. 두 수의 합이 4이며, 이는 2로 나누어떨어지기 때문입니다. 반면 (1, 2)의 합은 3, (2, 3)의 합은 5로 2로 나누어지지 않습니다.알고리즘N과 K를 초기화합니다.1부터 N까지의 자연수를 생성하여 배열에 저장합니다.카운트 변수를 0으로 초기화합니다.두 개의 반복문을 사

  20. C++로 배열에서 합이 2의 거듭제곱이 되는 쌍의 개수 구하기

    배열이 주어졌을 때, 두 원소의 합이 2의 거듭제곱(1, 2, 4, 8, ...)이 되는 쌍(pair)의 개수를 구하는 문제입니다. 먼저 간단한 예시를 통해 문제를 이해해 보겠습니다.예시입력arr = [1, 2, 3]출력1합이 2의 거듭제곱이 되는 쌍은 (1, 3) 단 하나뿐입니다. 1 + 3 = 4이고, 4는 2²이므로 조건을 만족합니다.알고리즘이 문제는 브루트 포스(Brute Force) 방식으로 해결할 수 있습니다. 단계별 접근 방법은 다음과 같습니다.배열을 임의의 숫자들로 초기화합니다.카운트 변수를 0으로 초기화합니다.두 개

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:269/300  20-컴퓨터/Page Goto:1 263 264 265 266 267 268 269 270 271 272 273 274 275