이진 트리가 주어졌을 때, 반복(iterative) 방식과 재귀(recursive) 방식을 활용해 트리에 존재하는 반쪽 노드(half node)의 개수를 계산하는 방법을 알아보겠습니다. 반쪽 노드란 자식을 하나만 가지고 나머지 하나의 자식은 NULL인 노드를 말합니다. 단, 리프 노드는 반쪽 노드에 포함하지 않습니다. 이진 트리(Binary Tree)는 데이터 저장을 위해 사용되는 특수한 자료구조입니다. 이진 트리는 각 노드가 최대 두 개의 자식만 가질 수 있다는 조건을 갖습니다. 이진 트리는 정렬된 배열과 연결 리스트의 장점을
이진 트리가 하나 주어졌을 때, 반복(iterative)과 재귀(recursive) 두 가지 접근 방식을 사용해 트리에 존재하는 풀 노드(full node)의 개수를 계산하는 것이 이 글의 목표입니다. 풀 노드란 왼쪽과 오른쪽 자식을 모두 가지고 있으며, null인 자식이 없는 노드를 의미합니다. 즉, 정확히 두 개의 자식을 가진 노드만 풀 노드로 간주합니다. 이진 트리(Binary Tree)는 데이터 저장을 위해 사용되는 특수한 자료구조입니다. 이진 트리는 각 노드가 최대 두 개의 자식만 가질 수 있다는 조건을 갖습니다. 이진
하나의 숫자 num이 주어졌을 때, 0과 1만으로 구성되며 길이가 num인 이진 문자열의 개수를 계산하는 것이 이번 문제의 목표입니다. 2진법과 이진 문자열이란? 2진법(Binary Number System)은 숫자 표현 방식 중 하나로, 디지털 시스템에서 가장 널리 사용되는 체계입니다. 2진법은 오직 두 가지 동작 상태 또는 가능한 조건만 가지는 장치로 표현할 수 있는 값을 나타내는 데 사용됩니다. 대표적인 예로 스위치를 들 수 있는데, 스위치는 켜짐과 꺼짐이라는 두 가지 상태만 가질 수 있습니다. 2진법에는 0과 1이라는 단 두
이번 글에서는 하나의 숫자가 주어졌을 때, 그 숫자에 1을 더하는 과정에서 몇 개의 비트가 변경되는지 계산하는 방법을 알아보겠습니다.숫자의 이진수 표현은 주어진 수를 0과 1의 형태로 변환하는 것을 의미하며, 다양한 방법으로 구할 수 있습니다. 대표적인 방법 중 하나는 주어진 수를 2로 나눈 나머지를 확인하는 것입니다. 나머지가 0이 아니면 해당 자리의 비트는 1로 설정되고, 나머지가 0이면 비트는 0으로 설정됩니다.비트의 덧셈 규칙0 + 1 = 1 1 + 0 = 1 0 + 0 = 0 1 + 1 = 10 (자리올림 1비트 발생)예시
이 문제에서는 숫자 N이 주어졌을 때, C++를 사용하여 수열 1, 4, 15, 24, 45, 60, 92…의 N번째 항을 구하는 프로그램을 작성하는 것이 목표입니다.문제 설명주어진 수열은 다음과 같습니다.1, 4, 15, 24, 45, 60, 92, 112 … N개의 항우리는 이 수열의 일반항(공식)을 찾아야 합니다.예제로 문제 이해하기입력 − N = 6출력 − 60해결 접근 방법이 수열의 일반항은 N이 홀수인지 짝수인지에 따라 달라집니다. 이러한 유형의 수열은 처음에는 패턴을 파악하기가 다소 까다롭지만, 수열을 홀수 번째 항과
이 문제에서는 하나의 숫자 N이 주어지며, C++를 사용해 수열 2, 4, 3, 4, 15, 0, 14, 16 …의 N번째 항을 구하는 프로그램을 작성하는 것이 목표입니다. 문제 설명 주어진 수열에서 N번째 항의 값을 찾아야 하며, 이를 위해 수열의 일반항 공식을 먼저 유도해야 합니다. 예제로 문제 이해하기 입력 − N = 9 출력 − 9 풀이 접근 방법 수열의 값 증가는 선형적입니다. 즉, 수열에 제곱수가 포함되어 있지 않습니다. 또한 각 항의 값은 다른 요소에도 영향을 받는데, 특히 2와 3으로 나눈 나머지가 중요한 역할을 합
이 문제에서는 하나의 수 N이 주어지며, 우리의 목표는 C++를 사용하여 수열 3, 5, 21, 51, 95, ...의 N번째 항을 구하는 프로그램을 작성하는 것입니다.문제 설명주어진 수열은 다음과 같습니다.3, 5, 21, 51, 95, 153, ... (N개의 항)각 항 사이의 증가 폭이 일정하게 늘어나는 패턴을 보이므로, 이 수열의 일반항은 이차식(2차 다항식) 형태로 표현할 수 있습니다. 따라서 먼저 수열의 일반항 공식을 찾아야 합니다.예제로 문제 이해하기입력 − N = 6출력 − 153일반항 공식 유도하기수열의 인접한 항들
이 문제에서는 숫자 N이 주어지며, C++를 사용해 수열 3, 6, 18, 24, 45, 54, 84, ...의 N번째 항을 구하는 프로그램을 작성하는 것이 목표입니다. 문제 설명 주어진 수열은 다음과 같습니다. 3, 6, 18, 24, 45, 54, 84, ... (N개의 항) 우리는 이 수열의 일반항 공식을 찾아야 합니다. 입력 및 출력 예시 입력: N = 10 출력: 150 해결 접근 방법 수열의 일반항을 찾으려면 먼저 수열 전체를 관찰하고 적용 가능한 규칙성을 하나씩 확인해야 합니다. 모든 항이 3으로 나누어 떨어진다는
이 튜토리얼에서는 급수 3, 12, 29, 54, 86, 128, 177, 234, ...의 N번째 항을 구하는 프로그램을 작성하는 방법을 알아보겠습니다.이 문제에서는 하나의 숫자 N이 주어지며, 우리의 목표는 해당 위치에 있는 급수의 항 값을 계산하는 것입니다.접근 방법주어진 급수를 자세히 분석해 보면 각 항이 다음과 같은 일반항 공식으로 표현될 수 있습니다.T(n) = 4n² − 3n + 2이 공식이 실제로 성립하는지 몇 가지 항으로 검증해 보면 다음과 같습니다.n = 1일 때: 4(1)² − 3(1) + 2 = 3n = 2일
이 문제에서는 숫자 N이 주어지며, C++을 사용하여 수열 3, 12, 29, 54, 87, ...의 N번째 항을 구하는 프로그램을 작성하는 것이 목표입니다.주어진 수열은 다음과 같습니다.3, 12, 29, 54, 87, 128, ... (N개의 항)문제 이해를 위한 예시입력: N = 5출력: 87해결 접근 방법먼저 주어진 수열의 일반항(일반식)을 유도해 보겠습니다. 수열은 다음과 같습니다.3, 12, 29, 54, 87, 128, ...각 항 사이의 차이를 분석해 보면 9, 17, 25, 33...으로 등차가 8인 패턴을 보이며,
이 문제에서는 하나의 숫자 N이 주어지며, 우리의 과제는 수열 4, 14, 28, 46, 68, 94, 124, 158, ...의 N번째 항을 구하는 C++ 프로그램을 작성하는 것입니다.문제 설명주어진 수열의 N번째 항을 찾아야 합니다.수열: 4, 14, 28, 46, 68, 94, 124, ... (N개의 항)수열의 일반항(일반식)을 도출한 뒤, N값에 따라 해당 항의 값을 계산하는 방식으로 해결할 수 있습니다.예시를 통한 문제 이해입력: N = 5출력: 68풀이 접근법주어진 수열의 일반항을 유도해 보겠습니다. 수열은 다음과 같습
이 문제에서는 수열의 n번째 항을 나타내는 숫자 n이 주어지며, 우리의 목표는 C++로 수열 7, 21, 49, 91, 147, 217, ……의 N번째 항을 구하는 프로그램을 작성하는 것입니다. 문제 설명 — 수열 7, 21, 49, 91, 147, 217, …의 n번째 항을 찾아야 하며, 이를 위해 먼저 수열의 일반항을 유도합니다. 예제를 통해 문제를 이해해 보겠습니다. 입력 — N = 5 출력 — 147 해결 접근 방법 주어진 수열의 일반항을 유도해 보겠습니다. 수열은 다음과 같습니다. 7, 21, 49, 91, 147, 217
이 문제에서는 수열의 n번째 항을 나타내는 정수 n이 하나 주어집니다. 우리가 작성해야 할 프로그램은 C++를 이용해 수열 9, 23, 45, 75, 113…의 N번째 항을 구하는 것입니다. 문제 설명 주어진 수열의 일반항을 먼저 찾아낸 뒤, 그 식을 이용해 n번째 항을 계산해야 합니다.대상 수열은 다음과 같습니다. 9, 23, 45, 75, 113, 159, 213, … 예시로 이해하기 입력: n = 5 출력: 159 해결 접근 방법 주어진 수열의 일반항은 다음과 같습니다. N번째 항 = (2×N + 3)² &minu
문제 개요 이 문제에서는 a, b, c가 상수인 ax² + bx + c 형태의 이차방정식이 주어집니다. 목표는 C++ 프로그램을 작성하여 해당 이차방정식이 가지는 해(실근)의 개수를 구하는 것입니다. 문제 설명 – 이차방정식은 최대 2개의 해를 가질 수 있으므로, 주어진 방정식의 해가 정확히 몇 개인지 판별해야 합니다. 예제로 이해하기 예제 1 입력: 3x² + 7x + 4 출력: 2 설명: 판별식이 양수이므로 서로 다른 두 개의 실근(-1과 -4/3)을 가집니다. 예제 2 입력: x² − 4x + 4 출력: 1 설명: 방
문제 소개이번 문제에서는 체스판의 크기가 주어졌을 때, 그 체스판 안에 존재하는 모든 정사각형의 개수를 구하는 프로그램을 C++로 작성합니다.문제 설명단순히 눈에 보이는 칸만 세는 것이 아니라, 체스판 내부에 만들 수 있는 모든 크기의 정사각형 조합을 계산해야 합니다. 즉, 한 변의 길이가 1×1, 2×2, 3×3 … n×n인 정사각형을 모두 찾아 더해야 합니다.예시로 이해하기입력: n = 4출력: 30크기 1×1인 정사각형 → 16개크기 2×2인 정사각형 → 9개크기 3×3인 정사각형 → 4개크기 4×4인 정사각형 → 1개정사각형
이 문서에서는 사용자로부터 입력을 받아, 그 입력값이 어떤 데이터 유형인지 판별하는 C++ 프로그램을 만드는 방법을 알아봅니다. 문제 설명 사용자가 입력한 값을 받은 뒤, 해당 값이 정수, 실수, 문자열 중 무엇에 해당하는지 확인하는 것이 과제입니다. 예제로 이해하기 예제 1 입력 − 34 출력 − 정수(Integer)입니다. 예제 2 입력 − tutorialspoint 출력 − 문자열(String)입니다. 해결 접근 방법 판별 로직은 다음과 같은 단계로 구성됩니다. 입력받은 문
이 튜토리얼에서는 C++를 사용하여 주어진 숫자의 패리티(parity)를 찾는 프로그램을 다룹니다.패리티란 숫자를 이진수로 표현했을 때 1의 개수가 홀수인지 짝수인지를 나타내는 값입니다. 예를 들어, 이진수에서 1의 개수가 홀수이면 홀수 패리티, 짝수이면 짝수 패리티라고 합니다.패리티 계산 알고리즘가장 효율적인 방법은 비트 연산을 활용하는 것입니다. n & (n - 1) 연산은 n의 가장 오른쪽에 있는 1비트를 제거하는 성질을 가지고 있습니다. 이 연산을 반복적으로 수행하면서 패리티 값을 뒤집으면, 전체 1비트의 개수가 홀수
이 문제에서는 정사각형의 한 변의 길이(A)와 직사각형의 가로, 세로 길이(L, B)가 주어집니다. 우리의 목표는 C++을 이용해 정사각형과 직사각형의 둘레(perimeter/circumference)를 계산하는 프로그램을 작성하는 것입니다.문제 설명정사각형의 둘레를 구하려면 한 변의 길이(a)가 필요합니다. 정사각형의 네 변은 모두 같으므로, 둘레 공식 4a(변의 길이 × 4)를 사용합니다.직사각형의 둘레를 구하려면 가로 길이(L)와 세로 길이(B)가 필요합니다. 마주 보는 두 변의 길이가 서로 같으므로, 둘레 공식 2(L + B
이 튜토리얼에서는 C++을 사용하여 주어진 두 정수 사이에 존재하는 소수(prime number)를 찾는 프로그램을 만드는 방법을 알아보겠습니다.프로그램은 시작 값(하한)과 끝 값(상한)으로 두 개의 정수를 제공받으며, 우리의 목표는 해당 범위 안에 포함된 모든 소수를 찾아 출력하는 것입니다.동작 원리소수를 판별하는 기본 아이디어는 다음과 같습니다.0과 1은 소수가 아니므로 검사 대상에서 제외합니다.각 숫자 i에 대해 2부터 i/2까지의 수로 차례대로 나누어 보고, 나누어 떨어지는 경우(약수가 존재하는 경우) 소수가 아니라고 판단합
이 문제에서는 매우 큰 수가 문자열 num 형태로 주어집니다. 우리의 과제는 C++을 사용하여 이 큰 수를 11로 나눴을 때의 나머지를 구하는 프로그램을 작성하는 것입니다.문제 설명문자열로 표현된 수를 11로 나눈 나머지를 구해야 합니다. 수가 너무 커서 일반적인 정수 자료형에 담을 수 없기 때문에, 문자열 그대로 처리해야 합니다.예제로 문제 이해하기입력num = 43212981843718452출력7해결 접근 방법나머지를 구하려면 당연히 나눗셈을 해야 합니다. 하지만 아주 큰 수를 한 번에 나누는 것은 복잡한 작업이므로, 프로세스를