문제 개요이 문제에서는 하나의 정수 N이 주어집니다. 우리가 해야 할 일은 N을 만들 수 있는 2의 거듭제곱들의 지수(거듭제곱 횟수)를 출력하는 것입니다.예시를 통해 문제를 더 쉽게 이해해 보겠습니다.입력 − 17출력 − 0, 4설명 − 17 = 24 + 20 = 16 + 1즉, 17은 2의 4제곱과 2의 0제곱을 더한 값이므로 지수인 0과 4를 출력하면 됩니다.해결 접근 방법이 문제는 숫자를 반복적으로 2로 나누는 방식으로 해결할 수 있습니다. 어떤 수든 2로 계속 나누면서 나머지를 기록하면, 그 수를 2의 거듭제곱들의 합으로 표
문제 개요이 문제에서는 문자열 str이 주어지며, 이 문자열의 원소들로 만들 수 있는 멱집합(Power Set)을 사전순(lexicographical order)으로 출력하는 것이 목표입니다.멱집합이란?멱집합(Power Set)은 어떤 집합 S의 모든 부분집합들을 원소로 가지는 집합을 의미하며, 일반적으로 P(S)로 표기합니다.예시S = {1, 2, 3}P(S) = {{}, {1}, {1, 2}, {1, 3}, {2}, {2, 3}, {3}, {1, 2, 3}}이 문제에서는 문자열을 하나의 집합으로 취급하기 때문에, 문자열을 구성하
문제 개요이 문제에서는 두 정수 n과 r이 주어지며, 우리의 목표는 n! (n의 팩토리얼) 안에 포함된 소수 r의 거듭제곱을 구하는 것입니다.예시를 통해 문제를 이해해 보겠습니다.입력 − n = 6, r = 2출력 − 4설명 −6! = 6 × 5 × 4 × 3 × 2 × 1 = 720720 = 24 × 32 × 5, 따라서 2의 거듭제곱은 4효율적인 접근 방법가장 단순한 해결책은 팩토리얼 값을 직접 계산한 후 소수의 거듭제곱을 세는 것입니다. 하지만 이 방법은 n이 커질수록 연산량이 급격히 늘어나고, 오버플로우가 발생할 위험도 있어
거듭제곱이란 무엇인가?수학에서 거듭제곱(power)은 어떤 수를 자기 자신과 여러 번 곱하는 것을 의미하며, 지수(exponent) 또는 멱수(indices)라고도 불립니다.a의 b제곱(ab)은 a를 b번 곱한 값을 뜻합니다. 예를 들어, 7의 2제곱(72, 즉 7의 제곱)은 7 × 7 = 49가 됩니다.자주 사용되는 거듭제곱의 성질어떤 수의 0제곱은 항상 1입니다.어떤 수의 1제곱은 자기 자신과 같습니다. 한 번 곱하면 값이 변하지 않기 때문입니다.어떤 수의 음수 제곱은 나눗셈으로 표현됩니다. 예를 들어, a-3 = 1/a3 =
pow() 함수(거듭제곱 함수)는 숫자의 거듭제곱을 계산할 때 사용하는 함수입니다. 일반적으로 실수에 많이 사용되지만, 이 글에서는 복소수(complex number)에 대한 pow() 함수의 구현과 사용법을 살펴보겠습니다. 복소수란 무엇인가? 복소수는 A + iB 형태로 표현할 수 있는 수입니다. 여기서 A는 실수부(real part), B는 허수부(imaginary part)를 나타냅니다. C++에서 복소수 관련 함수들은 헤더 파일 <complex>에 정의되어 있으며, 이 안에는 복소수용 pow() 메서드도 포함되어
문제 소개 이번 문제에서는 하나의 이진 트리가 주어지며, 재귀(recursion)와 스택(stack)을 사용하지 않고 이진 트리의 후위 순회 결과를 출력하는 것이 목표입니다. 이진 트리(Binary Tree)는 각 노드가 최대 2개의 자식 노드를 가질 수 있는 특수한 형태의 트리 자료구조입니다. 후위 순회(Postorder Traversal)란? 후위 순회는 대표적인 트리 순회 기법 중 하나로, 왼쪽 서브트리 → 오른쪽 서브트리 → 루트 순서로 노드를 방문합니다. 즉, 자식 노드들을 모두 먼저 처리한 뒤에 부모(루트) 노드를 가
문제 개요이 문제에서는 하나의 이진 트리와 특정 노드가 주어지며, 우리의 과제는 해당 노드의 후위 순회 후속자(postorder successor)를 찾아 출력하는 것입니다.이진 트리란?이진 트리(Binary Tree)는 각 노드가 최대 2개의 자식 노드를 가질 수 있는 특수한 트리 구조입니다.후위 순회란?후위 순회(Postorder Traversal)는 트리를 순회하는 기법 중 하나로, 먼저 왼쪽 서브트리를 순회한 다음 오른쪽 서브트리를 순회하고, 마지막에 루트(root)를 방문합니다.위 트리의 후위 순회 결과: 8 4 2 7 9
문제 개요이 문제에서는 후위 표기식(postfix)으로 작성된 수식이 주어지며, 우리의 과제는 이를 중위 표기식(infix) 형태로 변환하여 출력하는 것입니다.중위 표기식(Infix expression)은 연산자가 피연산자 사이에 위치하는 표현식으로, 피연산자 연산자 피연산자 형태를 가집니다.후위 표기식(Postfix expression)은 연산자가 피연산자 뒤에 오는 표현식으로, 피연산자 피연산자 연산자 형태를 가집니다.후위 표기식은 컴퓨터 시스템이 계산하기에는 매우 효율적이지만, 사람이 직접 읽고 이해하기는 어렵습니다. 따라서
문제 개요 이 문제에서는 두 개의 정수 N과 D가 주어집니다. 우리가 해야 할 일은 첫 N개의 자연수(1부터 N까지)를 두 개의 집합으로 나누었을 때, 두 집합에 속한 숫자들의 합 차이가 정확히 D가 될 수 있는지 판별하는 것입니다. 예시 입력: N = 5, D = 3 출력: Yes 설명: 1, 2, 3, 4, 5 중에서 set1 = {1, 2, 3}, set2 = {4, 5}로 나누면, {4+5} - {1+2+3} = 9 - 6 = 3 으로 차이가 3이 됩니다. 풀이 접근 방법 이 문제는 몇 가지 수학적 계산만으로 해결할 수 있습
문제 개요이 문제에서는 하나의 배열이 주어집니다. 배열에 포함된 모든 요소들의 자릿수를 전부 사용하여 만든 숫자가 3으로 나누어 떨어지는지 확인하는 것이 과제입니다. 만들 수 있다면 "Yes", 없다면 "No"를 출력하면 됩니다.예시로 문제 이해하기입력: arr = {3, 5, 91}출력: YES설명: 배열의 숫자들을 조합해 만든 수 5193은 3으로 나누어 떨어지므로 답은 YES입니다.해결 접근 방식이 문제는 3의 배수 판정법을 활용하면 간단히 해결할 수 있습니다.3의 배수 판정법: 어떤 수의
문제 개요정수로 이루어진 배열이 주어졌을 때, 배열의 원소들을 삼각형의 세 변으로 사용하여 넓이가 0보다 큰(퇴화되지 않는) 삼각형을 만들 수 있는지 확인하는 문제입니다.퇴화되지 않는 삼각형의 조건퇴화되지 않는(non-degenerate) 삼각형이란 양수의 넓이를 가지는 삼각형을 의미합니다. 세 변의 길이가 a, b, c일 때 다음 세 가지 부등식을 모두 만족해야 합니다.a + b > ca + c > bb + c > a예제를 통해 문제를 더 자세히 살펴보겠습니다.입력 − arr[] = {2, 5, 9, 4, 3}출력
이 문제에서는 계산기에서 흔히 볼 수 있는 세븐 세그먼트(7-Segment) 디스플레이에 표시되는 두 자리 숫자의 시간이 주어집니다. 우리가 해야 할 일은 화면의 선분(비트)을 하나 켜거나 껐을 때 만들어질 수 있는 다른 시간 조합이 총 몇 가지인지 계산하는 것입니다. 세븐 세그먼트 디스플레이란? 세븐 세그먼트 디스플레이는 7개의 선분을 켜고 끄는 조합으로 숫자를 표시하는 특수한 디스플레이 장치입니다. 디지털 시계, 계산기, 전자레인지 등 일상 속 다양한 전자기기에서 널리 사용되고 있습니다. 세븐 세그먼트 디스플레이의 예시는 아래
문제 소개이 문제에서는 N개의 정수로 이루어진 배열이 주어지며, 각 정수는 막대(stick)의 길이를 나타냅니다. 우리의 과제는 이 막대들로 만들 수 있는 사각형과 정사각형의 개수를 출력하는 것입니다.예시를 통해 문제를 더 자세히 살펴보겠습니다.입력 − array = {5, 5, 7, 7, 1, 4}출력 − 1설명 − 변의 길이가 각각 5, 5, 7, 7인 사각형 하나를 만들 수 있습니다.해결 접근 방법사각형이나 정사각형을 만들기 위해서는 같은 길이의 막대가 필요합니다. 사
이 문제에서는 m×n 크기의 체스판이 주어지며, 기물이 놓여 있는 위치는 1로 표시됩니다. 즉, board[i][j] = 1이면 해당 칸에 기물이 존재하는 것이죠. 그리고 나이트의 시작 위치가 주어졌을 때, 모든 기물이 같은 색이라고 가정하므로(즉, 공격이 일어나지 않는 상황) 체스판 위에서 나이트가 이동할 수 있는 총 경우의 수를 구하는 것이 우리의 과제입니다.체스에서 나이트의 이동 방식나이트(Knight)는 체스에서 특수한 방식으로 움직이는 기물입니다. 나이트의 이동 규칙은 다음과 같습니다.수평으로 두 칸, 수직으로 한 칸 이동
문제 설명 이 문제에서는 최대 105자리에 달하는 매우 큰 정수 하나가 주어집니다. 목표는 이 숫자를 여러 조각으로 잘랐을 때 3으로 나누어 떨어지는 조각의 개수가 최대가 되도록 하는 데 필요한 절단 횟수를 구하는 것입니다. 예시를 통해 문제를 이해해 보겠습니다. 입력 − 9216 출력 − 3 설명 − 숫자를 9|21|6처럼 세 조각으로 나누면, 세 조각 모두 3의 배수가 됩니다. 접근 방법 이 문제의 핵심은 누적 나머지(prefix remainder)를 활용하는 것입니다. 숫자를 왼쪽부터 오른쪽으로 한 자리씩 살펴보며, 현재 위
이 문제에서는 n개의 정수로 이루어진 미로가 주어집니다. 각 정수는 이동해야 할 칸 수를 의미하고, > 또는 < 기호는 이동 방향을 나타냅니다. 시작 지점은 인덱스 0이며, 이곳에서 출발했을 때 미로 밖으로 빠져나올 수 있는지 판별하는 것이 목표입니다.문제 이해를 위한 예시입력 −4 2 1 1 4 > < > >출력 −YES설명 − 시작 위치에서 먼저 2칸 앞으로 이동하고, 다음으로 1칸, 마지막으로 4칸 앞으로 이동하면 미로 밖으로 탈출하게 됩니다.해결 접근 방식미로 탈출이 가능하려면 이동 과정에서
문제 소개 이번 문제에서는 두 개의 문자열 str1과 str2가 주어지며, str2의 모든 문자가 str1 안에 존재하는지 판별하는 것이 목표입니다. 먼저 예시를 통해 문제를 살펴보겠습니다. 입력 − str1 = "Hello"str2 = "Hell" 출력 − yes 설명 − str2의 모든 문자(H, e, l, l)가 str1에 포함되어 있으므로 결과는 yes입니다. 효율적인 해결 방법: 빈도 배열 활용 가장 단순한 방법은 str2의 각 문자를 str1에서 일일이 찾아보는 것입니다. 하지만 이 방
문제 개요이 문제에서는 하나의 배열이 주어지며, 모든 양수는 짝수 인덱스에, 모든 음수는 홀수 인덱스에 위치하도록 배열을 변환하는 것이 목표입니다.양수와 음수의 개수가 서로 다를 수 있는데, 이 경우 남는 값들은 원래 자리에 그대로 두면 됩니다.예시를 통해 문제를 이해해 보겠습니다.입력 − {3, 5, -1, 19, -7, -2}출력 − {3, -1, 5, -7, 19, -2}이 문제를 해결하려면 배열에서 순서가 어긋난 요소를 찾아 적절한 위치로 옮겨야 합니다. 이를 찾는 방법은 여러 가지가 있으며, 여기서는
이 문제에서는 두 개의 정수 N과 K가 주어지며, 우리의 목표는 숫자 N을 오른쪽부터 세었을 때 K번째 세트 비트(set bit)의 인덱스를 찾는 것입니다.세트 비트는 숫자의 이진 표현을 통해 확인할 수 있습니다. 이진 표현에서 인덱싱은 오른쪽 끝자리를 0으로 시작하여 왼쪽 방향으로 진행됩니다.예시 — 이진수 011101의 경우, 오른쪽부터 인덱스 0에는 1이 있고, 인덱스 1에는 0이 있으며, 그다음 자리들도 같은 방식으로 번호가 매겨집니다.문제 이해를 위한 예시입력 — N = 6, K = 2출력 — 2설명 — 6의 이진 표현은
이 문제에서는 로봇이 상하좌우 네 방향으로 한 번에 한 칸씩 움직입니다. 방향은 위(U), 아래(D), 왼쪽(L), 오른쪽(R)이며, 각 방향의 첫 글자로 구성된 문자열이 주어집니다. 로봇의 초기 위치가 (0, 0)일 때, 주어진 문자열대로 이동한 후 로봇의 최종 위치를 출력하는 것이 목표입니다.문제 이해를 위한 예시입력 — LDRRUL출력 — (0, 0)풀이 과정 — (-1, 0) (-1, -1) (0, -1) (1, -1) (1, 0) (0, 0)여섯 번의 이동이 모두 상쇄되어 로봇은 다시 원점인 (0, 0)으로 돌아옵니다.해결