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

C++

  1. C++에서 N-Ary(다진) 트리의 깊이 구하는 방법

    N-Ary(다진) 트리는 각 노드가 두 개 이상, 즉 N개까지의 자식 노드를 가질 수 있는 일반화된 트리 구조입니다. 트리의 깊이(depth)란 루트 노드에서 가장 깊은 곳에 있는 리프 노드까지 이어지는 경로의 길이를 의미하며, 자식 노드들을 순회하면서 재귀적으로 계산할 수 있습니다. 이번 글에서는 C++를 이용해 N-Ary 트리의 깊이를 구하는 방법을 코드와 함께 단계별로 알아보겠습니다. 1. 트리 노드 구조체 정의하기 가장 먼저, 문자(character) 타입의 키 값을 저장하고 자식 노드 포인터들을 담는 벡터(vector)를

  2. C++ 이진 트리에서 가장 깊은 홀수 레벨 리프 노드의 깊이 구하기

    이진 트리에서 가장 깊은 홀수 레벨(odd level)에 위치한 리프 노드의 깊이를 구하는 알고리즘을 C++로 구현해 보겠습니다. 먼저 int형 키 값과 왼쪽·오른쪽 자식 노드 포인터를 담는 트리 노드 구조체부터 정의합니다. 최초로 생성되는 노드는 루트 노드가 되며, 이후 생성되는 노드들은 자식 노드로 연결됩니다.struct Node {   int data;   struct Node *leftChild, *rightChild;};1. 노드 생성 함수 — createNode()cr

  3. C++ 예제로 배우는 디사리움 수(Disarium Number) 판별 방법

    디사리움 수(Disarium Number)란?각 자릿수를 해당 자릿수의 위치만큼 거듭제곱한 값들의 합이 원래 수 자신과 같은 수를 디사리움 수(Disarium Number)라고 합니다.예를 들어 518의 경우, 왼쪽부터의 자릿수 위치는 각각 1, 2, 3입니다. 따라서 51 + 12 + 83 = 5 + 1 + 512 = 518이 되어 원래 수와 같으므로, 518은 디사리움 수입니다.자릿수를 구하는 함수: noOfDigits()noOfDigits(int num) 함수는 입력받은 수를 일의 자리만 남을 때까지 계속 10으로 나누며 자릿

  4. C++로 행렬식(Determinant) 구하는 방법 - 재귀적 여인수 전개 완벽 가이드

    행렬식(Determinant)은 정방행렬(Square Matrix), 즉 행과 열의 개수가 같은 행렬에 대해서만 계산할 수 있습니다. 계산 방법은 첫 번째 행의 각 원소에 해당하는 여인수(Cofactor) 행렬의 행렬식을 곱한 뒤, 부호를 교대로 바꿔가며 모두 더하면 됩니다.행렬식의 수학적 정의3×3 행렬 A의 행렬식은 다음과 같이 전개됩니다.$$A = \begin{bmatrix}a & b & c\\d & e & f \\g & h & i \\ \end{bmatrix}$$$$|A| = a(ei-fh) - b(di-gf) + c(dh-

  5. C++로 선분이 지나가는 단위 정사각형의 개수 구하기

    문제 개요격자 평면 위에서 두 끝점 (x1, y1)과 (x2, y2)가 주어졌을 때, 이 두 점을 잇는 선분이 통과하는 단위 면적(1×1) 정사각형의 개수를 구하는 것이 목표입니다.핵심 아이디어와 공식선분이 지나가는 정사각형의 개수를 구하려면 다음 세 가지 값을 계산해야 합니다.x 좌표의 차 (dx) = x2 − x1y 좌표의 차 (dy) = y2 − y1결과값 = dx + dy − gcd(dx, dy)여기서 최대공약수(gcd)를 빼는 이유는, 선분이 세로 격자선과 가로 격자선을 동시에 통과하는 지점에서는 새로운 정사각형이 하나만

  6. C++로 정규 N각형에서 세 번째 사람의 최적 위치 구하기

    N개의 꼭짓점을 가진 다각형에서 두 명의 아이가 각각 A와 B 꼭짓점에 서 있다고 가정해 봅시다. 이때 세 번째 사람이 서야 할 꼭짓점 번호를 구하는 것이 문제입니다. 조건은 세 번째 사람이 A와 B 양쪽 모두에 도달하기 위해 필요한 점프 횟수가 최소가 되어야 한다는 것입니다.문제의 핵심 조건이 문제에서 주목해야 할 두 가지 조건이 있습니다.다각형의 꼭짓점은 시계 방향으로 번호가 매겨집니다.정답이 여러 개일 경우에는 항상 가장 작은 번호의 꼭짓점을 선택합니다.알고리즘 설명vertexPosition(int sides, int vert

  7. C++에서 DFA 기반 나눗셈 구현하기

    결정적 유한 오토마타(DFA, Deterministic Finite Automaton)는 어떤 수가 다른 수 k로 나누어 떨어지는지 확인하는 데 활용할 수 있습니다. 이 알고리즘은 나누어 떨어지지 않는 경우 나머지까지 함께 구해주기 때문에 실용성이 높습니다.DFA 기반 나눗셈에서는 k개의 상태를 가진 DFA 테이블을 만듭니다. 수를 이진수로 표현하기 때문에 DFA의 각 상태에서 입력은 0과 1뿐입니다.전이 테이블 생성하기createTransTable(int k, int transTable[][2]) 함수는 전이 테이블(transTa

  8. C++에서 'THE'로 끝나지 않는 문자열 판별하기: DFA 구현 가이드

    DFA(결정적 유한 오토마타, Deterministic Finite Automaton)를 활용하면 THE라는 부분 문자열로 끝나지 않는 문자열을 효율적으로 판별할 수 있습니다. 이때 중요한 점은 tHe, The, ThE처럼 대소문자 조합이 다른 모든 변형 역시 문자열의 끝에 나타나서는 안 된다는 것입니다. DFA 상태 설계 개요 이 문제의 DFA는 총 4개의 상태(0~3)로 구성됩니다. 상태 0 : 시작 상태 — 아직 어떤 문자도 일치하지 않음 상태 1 : T까지 일치 상태 2 : TH까지 일치 상태 3 : THE까지 일치 — 문

  9. C++로 정육각형의 대각선 구하기

    정육각형의 대각선 공식정육각형(regular hexagon)은 여섯 개의 정삼각형(equilateral triangle)으로 이루어져 있습니다. 이러한 기하학적 특성 때문에 마주 보는 두 꼭짓점을 잇는 정육각형의 대각선(최장 대각선)은 항상 한 변의 길이 × 2와 같습니다.수식으로 표현하면 다음과 같습니다.대각선 = 2 × 한 변의 길이예를 들어 한 변의 길이가 12라면, 대각선의 길이는 2 × 12 = 24가 됩니다.C++ 구현 예제다음은 변의 길이가 주어졌을 때 정육각형의 대각선을 계산하는 C++ 프로그램입니다. 음수인 변의 길

  10. C++로 정오각형 대각선 길이 구하기

    정오각형 대각선 공식정오각형(regular pentagon)의 대각선 길이는 한 변의 길이에 황금비를 곱하여 간단히 구할 수 있습니다. 공식은 다음과 같습니다.대각선 = (1 + √5) × s / 2여기서 s는 한 변의 길이를 의미합니다. √5 ≈ 2.24이므로 실제 계산에서는 (1 + 2.24) × s / 2로 근사하여 사용할 수 있으며, 이 계수는 약 1.62로 황금비(φ ≈ 1.618)와 일치합니다.예제 코드다음은 한 변의 길이가 주어졌을 때 정오각형의 대각선 길이를 계산하는 C++ 프로그램입니다.#include <ios

  11. C++로 이진 트리의 대각선 합 계산하기

    이진 트리에서 대각선 합(Diagonal Sum)을 구하려면 기울기가 -1인 직선들을 기준으로 노드들을 살펴봐야 합니다. 즉, 각 기준선 사이에 위치한 모든 노드의 데이터 값을 더한 것이 곧 해당 대각선의 합이 됩니다.트리 노드 구조체 정의먼저 노드의 데이터와 왼쪽·오른쪽 자식 노드를 담고 있는 트리 노드를 표현할 구조체를 정의합니다. 가장 처음 생성되는 노드는 루트(root) 노드가 되고, 그 이후에 생성되는 노드들은 자식(child) 노드가 됩니다.struct Node { int data; struct Node *

  12. C++로 구현하는 이진 트리 대각선 순회(Diagonal Traversal)

    이진 트리의 대각선 순회(Diagonal Traversal)는 기울기가 -1인 직선들을 기준으로, 같은 대각선 위에 놓인 노드들을 하나의 그룹으로 묶어 차례대로 탐색하고 출력하는 방식입니다. 루트에서 오른쪽 자식으로만 이어지는 경로가 첫 번째 대각선을 이루고, 왼쪽 자식으로 내려갈 때마다 다음 대각선으로 넘어간다고 생각하면 개념을 쉽게 이해할 수 있습니다.트리 노드 구조체 정의먼저 데이터와 왼쪽·오른쪽 자식 포인터를 가지는 트리 노드를 표현하는 구조체를 정의합니다. 최초로 생성되는 노드는 루트(root) 노드가 되고, 이후 생성되는

  13. C++로 대각 우세 행렬(Diagonally Dominant Matrix) 판별하기

    행렬의 모든 행에 대해 대각선 요소의 절댓값이 해당 행에 있는 다른 모든 비대각선 요소들의 절댓값 합보다 크거나 같으면, 이 행렬을 대각 우세 행렬(Diagonally Dominant Matrix)이라고 합니다.알고리즘 개요먼저 행렬의 크기를 나타내는 상수 정수형 변수 N을 값 3으로 정의합니다.const int N = 3;isDDM(int mat[N][N], int n) 함수는 불리언(Boolean) 타입의 함수로, 행렬과 행렬의 크기를 인자로 받습니다. 함수 내부에서는 중첩 for 루프를 사용하여 행렬의 각 행과 열을 순회하며,

  14. C++에서 O(n)으로 이진 트리의 지름 구하기 – 새로운 접근 방법

    이진 트리의 지름이란?이진 트리의 지름(diameter)은 각 노드를 기준으로 (왼쪽 서브트리의 높이 + 오른쪽 서브트리의 높이 + 1)로 정의됩니다. 즉, 트리 안의 임의의 두 노드를 연결하는 경로 중 가장 긴 경로에 포함된 노드의 개수를 의미합니다.이 방법에서는 모든 노드에 대해 (왼쪽 높이 + 오른쪽 높이 + 1) 값을 계산하고, 그중 최댓값으로 결과를 갱신합니다. 단 한 번의 순회만으로 답을 구할 수 있기 때문에 시간 복잡도는 O(n)으로 유지됩니다.노드 구조체 정의먼저 데이터와 왼쪽·오른쪽 자식 포인터를 가지는 트리 노드를

  15. PowerShell Invoke-WebRequest로 웹사이트 링크 추출하는 방법

    PowerShell을 사용해 웹사이트에 포함된 링크를 가져오려면, 먼저 Invoke-WebRequest cmdlet으로 해당 웹페이지의 데이터를 불러와야 합니다.$req = Invoke-WebRequest -uri https://theautomationcode.com $req출력 결과웹페이지 전체 데이터가 정상적으로 반환되면, 이제 링크 정보만 별도로 추출할 수 있습니다.링크만 가져오려면 Links 속성을 사용하면 됩니다. 이 속성 안에는 아래 출력 결과에서 확인할 수 있듯이 InnerHTML, InnerText, href 등 다양

  16. C++로 문자열에서 부분 문자열을 반복 삭제해 빈 문자열이 되는지 확인하는 방법

    두 개의 문자열 str1과 str2가 주어졌다고 가정해 보겠습니다. str2는 str1의 부분 문자열(substring)이며, str1에서 이를 삭제할 수 있습니다. 또한 str2는 str1 안에 여러 번 등장할 수도 있습니다.우리의 목표는 str1에서 str2를 계속해서 제거했을 때, 최종적으로 str1이 빈 문자열(null string)이 되는지 판별하는 것입니다. 빈 문자열이 될 수 있다면 1을, 그렇지 않다면 0을 반환하면 됩니다.예를 들어 입력이 str1 = CCCPPPPPP, str2 = CPP라고 해봅시다. 그러면 출력

  17. C++로 문자열에 짝수 길이 회문 부분 문자열이 존재하는지 확인하는 방법

    소문자로만 이루어진 문자열이 하나 주어졌다고 가정해 보겠습니다. 우리의 과제는 주어진 문자열 안에 짝수 길이를 가진 회문(palindrome) 부분 문자열이 존재하는지 확인하는 것입니다. 존재한다면 1(true)을 반환하고, 그렇지 않다면 0(false)을 반환합니다.예를 들어 입력이 afternoon이라면 출력은 true가 됩니다. afternoon에는 oo처럼 짝수 길이의 회문이 포함되어 있기 때문입니다.핵심 아이디어짝수 길이의 회문은 반드시 서로 같은 두 문자가 인접해 있는 구간을 포함합니다. 짝수 길이 회문은 중앙을 기준으로

  18. C++로 문자열이 aⁿbⁿ 패턴을 따르는지 확인하는 방법

    a와 b 두 문자로만 구성된 문자열이 주어졌을 때, 이 문자열이 aⁿbⁿ 형태를 만족하는지 판별하는 문제입니다. 즉, n개의 a 뒤에 정확히 n개의 b가 이어지는 구조인지 확인해야 합니다. 조건을 만족하면 1(true)을, 그렇지 않으면 0(false)을 반환합니다.예를 들어 입력 문자열이 aaaaaaaaaaaabbbbbbbbbbbb라면, 앞부분에 12개의 a가 있고 뒷부분에 동일하게 12개의 b가 이어지므로 결과는 true(1)가 됩니다.문제 해결 접근 방식이 문제는 다음과 같은 단계로 해결할 수 있습니다.입력 문자열의 전체 길이

  19. C++로 주어진 방향대로 이동한 후 시작 위치 (0, 0)으로 돌아올 수 있는지 확인하는 방법

    문제 개요어떤 사람이 좌표 평면의 원점, 즉 (0, 0) 위치에 서 있다고 가정해 보겠습니다. 이동 경로는 네 개의 문자로 구성된 문자열로 주어지며, 각 문자는 다음 방향을 의미합니다.E: 동쪽(east)W: 서쪽(west)N: 북쪽(north)S: 남쪽(south)이 문제의 목표는 문자열에 담긴 모든 이동을 순서대로 수행한 뒤, 다시 시작점인 (0, 0)으로 돌아올 수 있는지 판별하는 것입니다.예를 들어 입력이 EENWWS라면 결과는 참(true)이 됩니다. 동쪽으로 두 칸 이동한 뒤 북쪽으로 한 칸, 서쪽으로 두 칸, 마지막으로

  20. C++로 시작 좌표에서 목표 좌표까지 이동 가능 여부 확인하기

    문제 개요 두 개의 좌표 (sx, sy)와 (tx, ty)가 주어졌을 때, 시작점 (sx, sy)에서 도착점 (tx, ty)까지 이동할 수 있는지 판별하는 문제입니다. 허용되는 이동은 현재 점 (x, y)에 대해 다음 두 가지 변환 중 하나를 적용하는 것뿐입니다. (x, y) → (x, x + y) (x, y) → (x + y, y) 예를 들어, 시작점이 (1, 1)이고 목표점이 (4, 5)라면 답은 true(이동 가능)입니다. 실제 이동 경로는 다음과 같습니다. (1, 1) → (2, 1) (2, 1) → (3, 1) (3,

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:243/300  20-컴퓨터/Page Goto:1 237 238 239 240 241 242 243 244 245 246 247 248 249