이 문제에서는 양의 정수 N이 주어지며, 우리의 목표는 정렬된 순서에서 N번째 이진 문자열을 찾는 것입니다.즉, 두 개의 문자 a와 b만으로 만들 수 있는 무한한 문자열 목록에서 사전순(lexicographical order)으로 정렬했을 때 N번째에 해당하는 문자열을 구해야 합니다.해당 문자열 목록은 다음과 같습니다.a, b, aa, ab, ba, bb, aaa, aab, aba, …문제 이해를 위한 예시입력 : N = 8출력 : aab해결 접근 방법가장 단순한 해결 방법은 반복문을 사용하여 모든 문자열을 처음부터 생성한 뒤, 그
이 문제에서는 크기가 n인 배열 arr가 주어지며, 우리의 과제는 배열의 모든 요소를 동일하게 만드는 데 필요한 연산 횟수를 구하는 것입니다. 여기서 연산은 배열에서 가장 큰 값을 가진 요소로부터 나머지 모든 요소에 가중치를 균등하게 분배하는 작업으로 정의됩니다. 만약 배열의 모든 요소를 동일하게 만드는 것이 불가능하다면 -1을 출력해야 합니다. 예시로 이해하기 입력 : arr[] = {7, 3, 3, 3} 출력 : 3 설명 연산을 수행한 후의 배열은 {4, 4, 4, 4}가 됩니다. 즉, 총 3번의 연산을 거쳐 모든 요소가 4로
문제 설명이 문제에서는 2차원 평면 위에 놓여 있는 N개의 점이 주어집니다. 우리의 과제는 각 점의 위, 아래, 왼쪽, 오른쪽 중 한 방향이라도 최소 1개의 점이 존재하는 점의 개수를 찾는 것입니다.즉, 다음 네 가지 조건 중 하나라도 만족하는 인접 점이 있는 모든 점을 세어야 합니다.위쪽에 점이 있는 경우 − X 좌표는 같고, Y 좌표가 현재 값보다 1 큰 점이 존재아래쪽에 점이 있는 경우 − X 좌표는 같고, Y 좌표가 현재 값보다 1 작은 점이 존재왼쪽에 점이 있는 경우 − Y 좌표는 같고, X
이 문제에서는 소수 N이 하나 주어지며, 우리의 목표는 이 소수에 대한 모듈로 원시근(primitive root)을 구하는 것입니다. 원시근(Primitive Root)이란? 어떤 수의 원시근이란 N보다 작은 수 r 중에서, x가 [0, n-2] 범위 내의 모든 값에 대해 rx (mod N)의 결과가 항상 서로 다른 값을 갖는 수를 의미합니다. 예시를 통해 문제를 살펴보겠습니다. 입력 : N = 5 출력 : 2 N = 5인 경우 원시근은 2와 3으로 총 두 개이며, 그중 가장 작은 원시근은 2입니다. 참고로 소수 N의 원시근 개
문제 개요 이 문제에서는 두 값 n과 소수 p가 주어지며, 모듈로 p(modulo p) 하에서의 제곱근을 찾는 것이 목표입니다. 여기서 p는 반드시 4×i+3 형태여야 합니다. 즉, i > 1일 때 p % 4 = 3을 만족하는 소수라는 뜻입니다. 이 조건을 만족하는 수로는 7, 11, 19, 23, 31 등이 있습니다. 예시를 통해 문제를 살펴보겠습니다. 입력 : n = 3, p = 7 출력 : 제곱근이 존재하지 않음 (3은 7의 이차 잉여가 아님) 방법 1 — 반복문을 이용한 완전 탐색 가장 단순한 해결 방법은 반복문을 사용
이 문제에서는 두 값 n과 소수 p가 주어지며, 우리의 목표는 모듈로 p(Modulo p) 하에서의 제곱근을 찾는 것입니다.문제 이해하기예시를 통해 문제를 살펴보겠습니다.입력 : n = 4, p = 11출력 : 9위 예제에서 9² = 81이고, 81 mod 11 = 4이므로 9는 모듈로 11에서 4의 제곱근이 됩니다.해결 접근 방식: Tonelli-Shanks 알고리즘이 문제는 Tonelli-Shanks 알고리즘을 사용하여 해결할 수 있습니다.Tonelli-Shanks 알고리즘은 모듈러 산술(modular arithmetic)에서
이 문제에서는 정렬되지 않은 n개의 정수로 구성된 배열 arr[]와 하나의 정수 val이 주어집니다. 우리의 목표는 정렬되지 않은 배열 안에서 해당 요소가 위치한 시작 인덱스와 끝 인덱스를 찾는 것입니다.요소가 배열에 등장하는 횟수에 따라 결과를 아래와 같이 출력해야 합니다.요소가 배열에 두 번 이상 존재하는 경우 → 시작 인덱스와 끝 인덱스를 출력요소가 배열에 한 번만 존재하는 경우 → 해당 단일 인덱스를 출력요소가 배열에 존재하지 않는 경우 → 요소가 배열에 없음을 출력문제 이해를 위한 예제예제 1입력 : arr[] = {2,
이 문제에서는 N×N 크기의 2차원 행렬과 두 개의 변수 sum(합계), size(크기)가 주어집니다. 우리의 과제는 주어진 합을 갖는 부분 행렬(sub-matrix)을 찾는 것입니다.즉, 요소들의 합이 sum과 같은 size×size 크기의 부분 행렬이 존재하는지 확인해야 합니다.문제 이해를 위한 예시입력 : mat[][] = { {1, 5, 7, 9} {2, 4, 6, 8} {1, 2, 5, 6} &n
문제 설명이 문제에서는 하나의 문자열 str과 정수 pow가 주어집니다. 우리의 목표는 주어진 파워(power) 값을 가지는 부분 문자열(substring)을 찾아 반환하는 것입니다.여기서 문자열의 파워란 문자열을 구성하는 각 문자의 파워를 모두 더한 값입니다.각 문자의 파워는 알파벳 순서 번호로 정의됩니다: a → 1, b → 2, c → 3, ...예시로 문제 이해하기입력 : string = "programming", power = 49출력 : pro풀이 설명 −"pro"의 파워 계산:powe
이 문제에서는 정렬되지 않은 상태로 저장된 N개의 양의 정수로 이루어진 배열 arr[]가 주어지며, 우리의 목표는 주어진 합(sum)과 같은 값을 갖는 부분 배열(subarray)을 찾는 것입니다.문제 이해하기예시를 통해 문제를 살펴보겠습니다.입력 : arr[] = {2, 5, 1, 4, 6, 9, 5}, sum = 11 출력 : subarray = {1, 4, 6}설명 −부분 배열의 합 = 1 + 4 + 6 = 11방법 1: 중첩 반복문(브루트 포스)가장 직관적인 해결 방법은 중첩 반복문을 사용하는 것입니다. 바깥쪽 반복문으로 시
문제 개요이번 문제에서는 정렬되지 않은 상태로 저장된 N개의 정수로 구성된 배열 arr[]가 주어지며, 그중 합이 주어진 값(sum)과 일치하는 부분 배열(subarray)을 찾아야 합니다. 배열에 음수가 포함될 수 있다는 점이 핵심인데, 양수 전용 문제에서 흔히 쓰이는 합이 초과하면 탐색을 중단하는 최적화 기법은 오히려 정답을 놓치게 만들 수 있습니다.예제로 문제 이해하기입력 : arr[] = {2, 5, -1, 4, 6, -9, 5}, sum = 14출력 : 부분 배열 = {5, -1, 4, 6}설명 −부분 배열의 합 = 5 +
이 문제에서는 하나의 이진 트리(Binary Tree)가 주어지며, 우리의 목표는 트리에 존재하는 모든 왼쪽 리프(left leaf) 노드의 값의 합을 구하는 것입니다.여기서 왼쪽 리프 노드란, 부모 노드의 왼쪽 자식이면서 동시에 자식 노드가 없는(즉, 잎 노드인) 노드를 의미합니다.문제 예제로 이해하기입력:출력: 11설명:트리의 왼쪽 리프 노드 : 2, 9 합계 = 2 + 9 = 11해결 방법 1 — 재귀(Recursion) 활용가장 간단한 방법은 루트 노드부터 리프 노드까지 트리를 순회하는 것입니다. 순회 중 어떤 노드가 왼쪽
이 문제에서는 하나의 이진 트리가 주어지며, 우리의 과제는 주어진 이진 트리에서 모든 오른쪽 리프(right leaf) 노드의 합을 구하는 것입니다. 여기서 오른쪽 리프 노드란 부모 노드의 오른쪽 자식이면서 동시에 자식이 없는 노드를 의미합니다. 문제 이해하기 예시를 통해 문제를 살펴보겠습니다. 입력 : 출력 : 8 설명 − 트리의 오른쪽 리프 노드 : 1, 7 합 = 1 + 7 = 8 위 트리에서 노드 1은 노드 4의 오른쪽 자식이자 리프 노드이고, 노드 7은 노드 6의 오른쪽 자식이자 리프 노드입니다. 따라서 두 값의 합인 8
문제 개요이 문제에서는 n개의 정수로 이루어진 배열 arr[]가 주어집니다. 우리의 목표는 주어진 배열에서 서로 다른(고유한) 부분 배열 합들을 모두 찾아 그 총합을 구하는 것입니다. 여기서 부분 배열 합(subarray sum)이란 해당 부분 배열에 포함된 원소들을 모두 더한 값을 의미합니다.예제로 문제 이해하기입력 : arr[] = {1, 2, 4}출력 : 23설명 −주어진 배열의 모든 부분 배열 :(1), (2), (4), (1, 2), (2, 4), (1, 2, 4)부분 배열 합의 총합 = 1 + 2 + 4 + (1+2) +
문제 개요 이 문제에서는 하나의 자연수 N이 주어집니다. 우리가 구해야 하는 값은 N의 모든 약수에 대해 각 약수의 약수 합을 계산한 뒤, 이를 모두 더한 총합입니다. 예시로 문제 이해하기 예제를 통해 문제를 자세히 살펴보겠습니다. 입력 : N = 12 출력 : 55 풀이 설명 − 12의 약수 : 1, 2, 3, 4, 6, 12 각 약수의 약수 합 = (1) + (1 + 2) + (1 + 3) + (1 + 2 + 4) + (1 + 2 + 3 + 6) + (1 + 2 + 3 + 4 + 6 + 12) =
이 문제에서는 하나의 연결 리스트(Linked List)가 주어집니다. 우리의 과제는 연결 리스트를 순회하면서 짝수 값을 가진 노드들의 합과 홀수 값을 가진 노드들의 합을 각각 구하는 것입니다.문제 이해를 위한 예시입력 : 연결 리스트 : 3 -> 2 -> 5 -> 7 -> 1 -> 9출력 : evenSum = 2 ; oddSum = 25설명 −evenSum = 2oddSum = 3 + 5 + 7 + 1 + 9 = 25위 예시에서 짝수 값은 2뿐이므로 evenSum은 2가 되고, 나머지 홀수 값들을 모두
이 문제에서는 양수이면서 서로 중복되지 않는 원소로 이루어진 두 개의 배열이 주어집니다. 우리의 목표는 두 배열에서 각각 하나의 원소를 선택해 만들 수 있는 쌍(pair) 중 최대 합을 구하는 것입니다.즉, 첫 번째 배열에서 하나의 원소를, 두 번째 배열에서 하나의 원소를 뽑아 만들 수 있는 모든 쌍 중에서 합이 가장 큰 값을 찾으면 됩니다.문제 예시입력 : arr1[] = {3, 7, 5}, arr2[] = {8, 2, 4}출력 : 15설명 −가장 큰 합을 가지는 쌍은 (7, 8) → 7 + 8 = 15풀이 접근 방법1. 단순한
문제 개요이 문제에서는 정수 N이 주어지며, 목표는 1² − 2² + 3² − 4² + … 과 같이 부호가 번갈아 나타나는 수열의 n번째 항까지의 합을 구하는 것입니다.예시를 통해 문제를 이해해 보겠습니다.입력 : N = 3출력 : 6설명 −1² − 2² + 3² = 1 − 4 + 9 = 6풀이 방법 1: 반복문 활용가장 직관적인 해결 방법은 반복문을 사용하는 것입니다. 반복 변수 i를 1부터 n까지 순회하며 다음 규칙을 적용합니다.i가 홀수이면 i²를 합에 더합니다.i가 짝수이면 i²를 합에서 뺍니다.반복이 끝난 후 누적된 합을
이 문제에서는 하나의 정수 N이 주어지며, n번째 항이 n2 − (n−1)2로 정의되는 수열의 첫 n항까지의 합을 구하는 것이 목표입니다. 예시를 통해 문제를 살펴보겠습니다. 입력 : N = 3 출력 : 9 풀이 설명 — [12 − (0)2] + [22 − (1)2] + [32 − (2)2] = 1 − 0 + 4 − 1 + 9 − 4 = 9 해결 접근 방법 이 문제는 수열의 일반항을 먼저 구한 뒤, 그 합을 공식으로 계산하는 것이 가장 효율적입니다. 일반항 기반의 공식을 활용하면 반복문 없이 O(1) 시간 복잡도로 답을 구할 수
문제 개요이 문제에서는 정수 값 N이 주어지며, 우리의 목표는 √3 + √12 + ... 급수의 n항까지의 합을 구하는 것입니다.해당 급수는 다음과 같습니다.√3 + √12 + √27 + √48 + ...즉, 제곱근으로 이루어진 급수입니다.예제로 문제 이해하기입력 : N = 3출력 : 10.3922설명 −√3 + √12 + √27 = 1.7320 + 3.4641 + 5.1961 = 10.3922해결 접근 방식이 문제를 해결하는 가장 간단한 방법은 급수의 일반항을 먼저 찾은 뒤, n항까지의 합을 구하는 것입니다. 공식을 활용해 합을