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

C++

  1. C++로 이진 트리에서 루트 노드부터 특정 노드까지의 경로 출력하기

    이 튜토리얼에서는 이진 트리(binary tree)에서 루트 노드부터 주어진 노드까지의 경로를 출력하는 프로그램을 만드는 방법을 알아보겠습니다.각 노드가 서로 다른 값을 가지는 이진 트리가 주어졌을 때, 루트 노드에서 출발하여 특정 노드에 도달하기까지 거치는 모든 노드의 값들을 순서대로 출력해야 합니다.접근 방식이 문제는 재귀(recursion)를 사용하면 깔끔하게 해결할 수 있습니다. 이진 트리를 순회하면서 찾고자 하는 값을 재귀적으로 탐색하고, 탐색 과정에서 지나온 노드들의 값을 벡터(vector)에 저장하여 경로를 기록합니다.

  2. C++로 세 점에서 평행사변형을 만드는 모든 가능한 좌표 구하기

    문제 개요 주어진 세 개의 좌표를 이용해 넓이가 0이 아닌 평행사변형을 만들 수 있는 모든 네 번째 좌표를 찾는 것이 이 글의 목표입니다. 점 A, B, C가 주어졌을 때 평행사변형을 구성할 수 있는 경우는 다음의 세 가지뿐입니다. AB와 AC가 두 변이 되고, BC가 대각선이 되는 경우 AB와 BC가 두 변이 되고, AC가 대각선이 되는 경우 BC와 AC가 두 변이 되고, AB가 대각선이 되는 경우 즉, 세 좌표만 주어져도 평행사변형을 완성할 수 있는 네 번째 좌표는 정확히 세 개 존재합니다. 평행사변형에서는 마주보는 두 변의

  3. C++로 완전 이진 트리의 루트에서 모든 노드까지의 경로 출력하기

    C++로 완전 이진 트리의 모든 경로 출력하기 이 튜토리얼에서는 완전 이진 트리(complete binary tree)에서 루트 노드로부터 트리 내 모든 노드까지의 경로를 출력하는 프로그램을 C++로 구현하는 방법을 알아봅니다. 문제 정의 숫자 N이 주어지며, 이는 이진 트리에 1부터 N까지의 노드가 존재함을 의미합니다. 이때 1번 노드가 트리의 루트(root)입니다. 따라서 우리의 목표는 루트 노드에서 출발하여 트리에 있는 각 노드에 도달하는, 가능한 모든 경로를 출력하는 것입니다. 접근 방식 완전 이진 트리의 핵심 성질을 활용

  4. C++ 사전에서 특정 패턴과 일치하는 모든 문자열 찾는 방법

    문제 소개 문자열 목록으로 구성된 사전(dictionary)과 하나의 패턴(pattern) 문자열이 주어졌을 때, 사전 안에서 패턴과 일치하는 모든 문자열을 찾아야 합니다. 예를 들어 사전이 ["abb", "xyz", "aab", "kmm"]이고 패턴이 "stt"라고 가정해 보겠습니다. 이때 결과는 "abb"와 "kmm"입니다. 패턴 "stt"는 서로 다른 한 글자 뒤에 같은 글자 두 개가

  5. C++로 문자열에서 1(0+)1 패턴 모두 찾기: 단계별 알고리즘과 예제 코드

    문자열에 1(0+)1 형태의 패턴이 포함되어 있다고 가정해 보겠습니다. 여기서 (0+)는 하나 이상의 0이 연속해서 등장하는 구간을 의미합니다. 즉, 1로 시작해 최소 하나의 0을 거쳐 다시 1로 끝나는 부분 문자열을 모두 찾아야 하며, 패턴끼리 서로 겹쳐 있더라도 각각 세어야 합니다. 입력 문자열은 반드시 이진 문자열일 필요는 없고, 숫자와 소문자만 포함한다고 가정합니다. 예를 들어 문자열이 1101001이라면 다음 두 개의 패턴을 찾을 수 있습니다. 101 (인덱스 1~3) 1001 (인덱스 3~6) 두 패턴은 인덱스 3의

  6. C++로 정렬된 배열에서 등비수열을 이루는 모든 삼중항 찾기

    서로 다른 양의 정수로 구성된 정렬된 배열이 있다고 가정해 보겠습니다. 이때 우리가 찾아야 할 것은 정수 공비(common ratio)를 가지며 등비수열을 형성하는 모든 삼중항(triplet)입니다.예를 들어 배열이 [1, 2, 6, 10, 18, 54]라고 한다면, 답은 (2, 6, 18)과 (6, 18, 54)입니다. 각 삼중항은 공비 3을 가지는 등비수열을 이룹니다.접근 방법이 문제는 투 포인터(two pointer) 기법으로 효율적으로 해결할 수 있습니다. 배열의 두 번째 요소부터 시작하여 각 요소를 중간 요소로 고정한 뒤,

  7. C++ STL을 활용해 주어진 범위의 소수 출력하기

    C++ STL을 활용해 주어진 범위의 소수 출력하기이 글에서는 C++ 표준 템플릿 라이브러리(STL)를 활용하여 주어진 범위 안의 모든 소수를 출력하는 프로그램을 살펴보겠습니다.두 개의 수 a와 b가 주어졌을 때, 그 사이에 존재하는 모든 소수를 찾아 출력하는 것이 과제입니다. 이를 위해 에라토스테네스의 체(Sieve of Eratosthenes) 알고리즘을 서브루틴으로 실행하고, 구해진 소수들을 vector에 저장한 뒤 마지막에 한꺼번에 출력합니다.접근 방식핵심 아이디어는 다음과 같습니다.시작값(start) 이하의 소수 전체 목록

  8. C++에서 배열의 각 요소에 대한 가장 가까운 큰 값 찾기

    이 글에서는 배열의 각 요소에 대해 그보다 크면서 가장 가까운 값을 찾는 방법을 알아봅니다. 어떤 요소 x보다 큰 값이 배열 안에 존재한다면, 그중 가장 작은 값(즉, x 바로 위의 값)이 x의 가장 가까운 큰 값이 됩니다. 만약 x보다 큰 값이 배열에 없다면 -1을 출력합니다.예를 들어 배열이 [10, 5, 11, 10, 20, 12]라면 결과는 [11, 10, 12, 11, -1, 20]이 됩니다. 20보다 큰 값은 배열에 존재하지 않으므로 -1이 출력됩니다.접근 방법이 문제는 C++ STL의 set을 이용해 효율적으로 해결할

  9. C++로 재귀 없이 이진 트리의 루트–리프 경로 출력하기

    이 글에서는 주어진 이진 트리에서 루트 노드부터 모든 리프 노드까지의 경로를 재귀 호출 없이 출력하는 C++ 프로그램을 소개합니다. 문제 이해하기 예를 들어 다음과 같은 이진 트리가 있다고 가정해 보겠습니다. 이 이진 트리에는 4개의 리프 노드가 있습니다. 따라서 루트 노드에서 리프 노드까지 총 4개의 경로가 존재합니다. 일반적으로 이진 트리에서 루트–리프 경로의 개수는 리프 노드의 개수와 같습니다. 접근 방식: 반복적 전위 순회 + 부모 포인터 재귀 대신 반복(iterative) 방식으로 문제를 해결합니다. 핵심 아이디어는 다음

  10. C++로 두 문자열의 가장 긴 공통 부분 문자열(LCS) 찾아 출력하기

    이 튜토리얼에서는 두 문자열에서 가장 긴 공통 부분 문자열(Longest Common Substring)을 찾아 출력하는 프로그램을 C++로 구현하는 방법을 다룹니다.문자열 A와 B가 주어졌을 때, 두 문자열 모두에 연속적으로 등장하는 가장 긴 부분 문자열을 찾아 출력하는 것이 목표입니다.예를 들어 helloworld와 worldbook이라는 두 문자열이 주어진다면, 가장 긴 공통 부분 문자열은 world입니다.알고리즘의 동작 원리이 문제는 동적 계획법(Dynamic Programming)을 활용하면 효율적으로 해결할 수 있습니다.

  11. C++로 이진 트리의 루트-리프 최단 경로 찾아 출력하기

    이 튜토리얼에서는 C++를 사용하여 이진 트리(Binary Tree)에서 루트 노드부터 리프 노드까지 이어지는 첫 번째 최단 경로를 찾아 출력하는 프로그램을 살펴봅니다.문제 정의서로 다른 값으로 구성된 이진 트리가 주어졌을 때, 루트 노드에서 출발하여 리프 노드에 도달하는 여러 경로 중 깊이가 가장 얕은 경로, 즉 지나는 노드의 수가 가장 적은 경로를 찾아 출력해야 합니다.접근 방법이 문제는 큐(queue)를 이용한 레벨 순회(Level Order Traversal, BFS)로 효율적으로 해결할 수 있습니다. BFS는 트리를 위쪽

  12. C++ STL set을 활용해 배열의 각 요소보다 큰 가장 가까운 값 찾기

    이번 글에서는 배열의 모든 요소에 대해 자신보다 큰 값 중 가장 가까운 값을 찾는 방법을 알아보겠습니다. 어떤 요소 x보다 큰 값이 배열 안에 존재한다면 그 값을 결과로 출력하고, 존재하지 않는다면 -1을 반환합니다.예를 들어 배열이 [10, 5, 11, 6, 20, 12]라면, 각 요소에 대한 결과는 [11, 6, 12, 10, -1, 20]이 됩니다. 여기서 20보다 큰 값은 배열에 없으므로 -1이 출력됩니다.접근 방법: C++ STL의 set 활용이 문제는 C++ STL의 set을 사용하면 효율적으로 해결할 수 있습니다. se

  13. C++로 DFS(깊이 우선 탐색) 순회 과정을 단계별로 출력하는 프로그램

    이 튜토리얼에서는 주어진 그래프에서 깊이 우선 탐색(Depth First Search, DFS)을 수행하면서 순회의 모든 단계를 출력하는 C++ 프로그램을 다룹니다.여기서 출력되는 단계에는 자식 노드를 방문한 뒤 부모 노드로 되돌아가는 백트래킹(backtracking) 과정까지 포함됩니다.동작 원리DFS를 수행하는 동안 각 노드를 순회하면서 동시에 부모 노드와 사용된 간선(edge) 정보를 저장합니다. 순회 중 어떤 노드의 인접 간선이 이미 방문된 상태라면, 해당 노드로 되돌아가는 지점을 DFS 순회의 한 단계로서 화면에 출력할 수

  14. C++에서 주어진 수를 나눌 수 있는 자릿수의 개수 구하기

    어떤 수가 주어졌을 때, 그 수의 각 자릿수 중에서 원래의 수를 나머지 없이 정확히 나눌 수 있는 자릿수의 개수를 세는 문제입니다. 예를 들어 1012가 주어지면 결과는 3이 됩니다. 자릿수 1, 1, 2가 각각 1012를 나누어 떨어지게 하기 때문입니다.이 문제를 해결하려면 모듈로(%) 연산을 이용해 각 자릿수를 하나씩 추출하고, 해당 자릿수로 원래의 수가 나누어 떨어지는지 확인합니다. 나누어 떨어지면 카운터를 증가시키고, 마지막에 카운터 값을 반환하면 됩니다. 단, 자릿수가 0인 경우에는 0으로 나눌 수 없으므로 반드시 건너뛰어

  15. C++에서 숫자의 세제곱근 구하기: 이진 탐색 알고리즘으로 직접 구현하기

    개요이 글에서는 C++에서 숫자의 세제곱근(cubic root)을 구하는 방법을 알아봅니다. 예를 들어 27의 세제곱근은 3입니다. 일반적으로 cbrt() 같은 라이브러리 함수를 사용할 수 있지만, 여기서는 라이브러리 함수에 의존하지 않고 직접 로직을 구현해 보겠습니다.가장 효율적인 방법은 이진 탐색(Binary Search)을 활용하는 것입니다. 세제곱 함수는 단조 증가(monotonically increasing)하기 때문에, 답이 존재하는 범위를 절반씩 좁혀 가며 원하는 정밀도에 도달할 때까지 반복하면 됩니다.알고리즘 동작 방

  16. C++로 이진 트리에서 리프 노드 간 최장 경로 출력하기

    이번 튜토리얼에서는 주어진 이진 트리(Binary Tree)에서 한 리프 노드에서 다른 리프 노드까지 이어지는 가장 긴 경로를 출력하는 프로그램을 다루겠습니다. 다시 말해, 이진 트리의 지름(diameter)에 포함된 모든 노드를 출력해야 합니다. 여기서 지름(또는 너비)이란 한 끝 노드에서 다른 끝 노드까지 이르는 가장 긴 경로에 존재하는 노드의 개수를 의미합니다. 이 문제를 해결하려면 먼저 높이(height) 함수를 활용해 이진 트리의 지름을 계산합니다. 그다음 왼쪽 서브트리와 오른쪽 서브트리에서 각각 가장 긴 경로를 찾아낸 뒤

  17. O(n) 시간·O(1) 공간으로 배열 중복 찾기 – C++ 부호 표시 기법 (Set 1)

    문제 정의0부터 n-1 범위의 숫자로 이루어진 리스트가 있다고 가정해 봅시다. 어떤 숫자든 여러 번 반복해서 나타날 수 있으며, 우리는 추가 메모리 공간을 거의 사용하지 않고 반복되는 숫자들을 모두 찾아야 합니다.예를 들어 n = 7이고 리스트가 [5, 2, 3, 5, 1, 6, 2, 3, 4, 5]와 같다면, 답은 5, 2, 3입니다.핵심 아이디어: 부호 표시(Sign Marking) 기법이 문제를 풀 수 있는 열쇠는 모든 값이 인덱스 범위 안에 있다는 조건입니다. 배열의 각 값을 그대로 인덱스처럼 활용하고, 해당 위치의 값 부호

  18. C++로 이진 트리의 홀수 레벨 노드 출력하기

    개요이 튜토리얼에서는 주어진 이진 트리(binary tree)의 홀수 레벨(odd level)에 있는 노드들을 출력하는 C++ 프로그램을 다룹니다.여기서 루트(root) 노드의 레벨은 1로 간주하며, 그 아래 레벨은 짝수, 그다음 레벨은 다시 홀수가 됩니다. 즉, 레벨 1, 3, 5…에 위치한 노드들이 출력 대상입니다.예를 들어, 다음과 같은 이진 트리가 주어졌다고 가정해 보겠습니다.위 이진 트리에서 홀수 레벨에 있는 노드는 1, 4, 5, 6입니다.알고리즘 접근 방식이 문제는 재귀(recursion)를 활용하면 간단하게 해결할 수

  19. C++에서 단 두 번의 비교만으로 중복 숫자 찾기

    문제 설명서로 다른 6개의 숫자가 들어 있는 리스트가 있다고 가정해 보겠습니다. 이 중 하나의 숫자만 다섯 번 반복되므로, 배열에는 총 10개의 요소가 존재합니다. 목표는 단 두 번의 비교만으로 이 중복 숫자를 찾는 것입니다.예를 들어 리스트가 [1, 2, 3, 4, 4, 4, 4, 4, 5, 6]과 같다면, 출력 결과는 4가 되어야 합니다.접근 방법핵심은 비둘기집 원리(pigeonhole principle)에 있습니다. 배열이 정렬되어 있고 크기가 10일 때, 어떤 숫자가 다섯 번 반복되더라도 해당 숫자들은 반드시 인덱스 3부터

  20. C++에서 연속 요소의 XOR 값을 이용해 원본 배열 복원하기

    문제 개요n개의 요소로 이루어진 어떤 배열을 복원해야 하는 상황을 가정해 봅시다. 다만 우리가 알고 있는 정보는 실제 배열에서 인접한 두 요소끼리 XOR 연산한 값들과 배열의 첫 번째 요소뿐입니다.예를 들어 실제 배열이 a, b, c, d, e, f라면, 주어진 배열은 다음과 같습니다.a^b, b^c, c^d, d^e, e^f해결 아이디어핵심은 XOR 연산의 자기 역원(self-inverse) 성질입니다. 즉, 임의의 값 x에 대해 다음이 항상 성립합니다.x ^ x = 0x ^ 0 = x이 성질 때문에 (a ^ b) ^ a = b가

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:91/300  20-컴퓨터/Page Goto:1 85 86 87 88 89 90 91 92 93 94 95 96 97