N개의 요소를 가진 배열 D가 있다고 가정해 보겠습니다. 어느 코드 페스티벌에는 Amal을 포함해 총 N+1명의 참가자가 있으며, Amal이 확인한 결과 자신의 도시와 i번째 참가자의 도시 간 현지 시간 차이는 D[i]시간이었습니다.여기서 두 도시 간 시간 차이는 다음과 같이 정의됩니다. 24시간 표기법을 사용할 때, 도시 A의 현지 시간이 0시인 순간 도시 B의 현지 시간이 d시라면, 두 도시 간의 시간 차이는 d와 24−d 중 더 작은 값입니다.Amal은 N+1명 중 임의의 두 사람을 선택해 만들 수 있는 모든 조합에 대해 해당
문제 개요코딩 대회에는 난이도별로 점수가 다르게 매겨진 여러 문제가 출제됩니다. i번째 난이도의 한 문제는 100×i점을 가지며, 길이가 D인 배열 p는 각 난이도별 문제 수를 저장합니다. 즉, p[1]부터 p[D]까지의 합이 대회의 전체 문제 수가 됩니다. 또한 배열 c는 특정 난이도의 모든 문제를 완벽히 해결했을 때 추가로 지급되는 보너스 점수를 나타냅니다.코딩 사이트에서 사용자의 총점(total_score)은 다음 두 가지 요소의 합으로 계산됩니다.기본 점수: 해결한 모든 문제 점수의 합계보너스: 100i점짜리 문제를 전부 해
문제 개요그래프 G의 인접 행렬(adjacency matrix)이 주어졌다고 가정해 보겠습니다. 이때 그래프의 모든 정점을 비어 있지 않은 집합 V1, ..., Vk로 나눌 수 있는지 확인해야 하며, 나눈다면 다음 조건을 만족해야 합니다.모든 간선은 서로 인접한 두 집합에 속한 정점들을 연결해야 합니다.조건을 만족하는 분할이 가능하다면, 그러한 분할에서 집합의 개수 k가 가질 수 있는 최댓값을 구해야 합니다. 만약 어떤 방식으로도 조건을 만족하는 분할이 불가능하다면 -1을 반환합니다.예제 입력예를 들어 입력이 다음과 같은 인접 행렬
문제 개요길이가 N인 두 배열 X와 H, 그리고 두 정수 D와 A가 주어집니다. 이 문제에서 은빛 여우는 N마리의 몬스터와 싸우고 있습니다. 몬스터들은 일렬로 서 있으며, i번째 몬스터의 좌표는 X[i], 체력은 H[i]입니다.은빛 여우는 폭탄을 사용해 몬스터를 공격할 수 있습니다. 좌표 x에 폭탄을 떨어뜨리면 x − D부터 x + D까지 범위 안에 있는 모든 몬스터가 A만큼 피해를 입습니다. 모든 몬스터의 체력이 0이 되면 여우가 승리합니다. 우리는 승리하기 위해 필요한 최소 폭탄 개수를 구해야 합니다.예시입력이 다음과 같다고 가
문제 개요숫자 A가 주어졌을 때, A보다 크거나 같은 수 중에서 흥미로운(interesting) 수에 해당하는 가장 가까운 수를 찾는 것이 목표입니다. 여기서 흥미로운 수란 각 자릿수의 합이 4로 나누어 떨어지는 수를 의미합니다.예를 들어 입력이 A = 432라고 하면 출력은 435가 됩니다. 그 이유는 4 + 3 + 5 = 12이고, 12는 4로 나누어 떨어지기 때문입니다.접근 방식이 문제는 아주 단순한 반복 방식으로 해결할 수 있습니다. 숫자 A의 각 자릿값을 추출하여 모두 더한 뒤, 그 합을 4로 나눈 나머지가 0이 될 때까지
문제 소개 H개의 행과 W개의 열로 이루어진 격자(grid)가 있다고 가정해 보겠습니다. 각 칸은 깨끗한(tidy) 상태이거나 지저분한(untidy) 상태이며, 깨끗한 칸 위에는 램프를 0개 이상 자유롭게 설치할 수 있습니다. 램프는 상·하·좌·우 네 방향으로 빛을 비춥니다. 빛은 격자의 가장자리에 도달하거나 지저분한 칸을 처음 만나기 직전까지 퍼져 나가며, 지저분한 칸 자체는 밝히지 못합니다. 물론 램프가 놓인 칸 스스로도 밝혀집니다. 격자에서 G[i, j]가 .이면 그 칸은 깨끗하고, #이면 지저분함을 의미합니다. 깨끗한 칸의
문제 개요 n개의 요소로 구성된 배열 A와 하나의 수 m이 주어졌다고 가정해 봅시다. 이때 배열의 요소들을 적절히 재배열하여 다음 수식을 만족할 수 있는지 확인해야 합니다. $$\mathrm{\sum_{i=1}^{n} \sum_{j=i}^{n}\frac{A[j]}{j} = m}$$ 여기서 A[j]/j 연산은 반올림이나 버림 없이 실수 나눗셈 그대로 계산됩니다. 예를 들어 입력이 A = [2, 5, 1], m = 8이라면 출력은 True입니다. 배열을 [1, 2, 5]로 배치하면 다음과 같이 계산되어 정확히 8이 되기 때문입니다.
네 개의 숫자 p, a, b, c가 주어져 있다고 가정해 보겠습니다. 수영장에는 세 명의 선수가 있으며, 각 선수는 수영장을 한 번 건너고 되돌아오는 데 각각 a분, b분, c분이 걸립니다. 따라서 출발 시점을 기준으로 첫 번째 선수는 0, a, 2a, 3a… 분째에, 두 번째 선수는 0, b, 2b, 3b… 분째에, 세 번째 선수는 0, c, 2c, 3c… 분째에 수영장 왼쪽 끝(출발 지점)에 위치하게 됩니다.선수들이 수영을 시작한 지 p분 후에 우리가 수영장을 방문한다면, 적어도 한 명의 선수가 왼쪽 끝에 도착할 때까지 최소 얼
N개의 원소를 가진 배열 A가 주어졌을 때, 아래 조건을 만족하는 정수 쌍 (l, r)의 개수를 구하는 것이 이번 문제의 목표입니다. A[l] XOR A[l+1] XOR ... XOR A[r] = A[l] + A[l+1] + ... + A[r] 예를 들어 입력 배열이 A = [2, 5, 4, 6]이라면 결과는 5입니다. 조건을 만족하는 쌍은 (1,1), (2,2), (3,3), (4,4), (1,2)로 총 5개이기 때문입니다. 문제 해결 접근 방법 이 문제는 누적 합(Prefix Sum), 누적 XOR(Prefix XOR) 배열과
문제 설명길이가 n인 문자열 S가 주어졌다고 가정해 보겠습니다. S는 소문자로만 구성되어 있습니다. 우리는 0부터 n 사이의 값 k를 하나 선택한 뒤, S에서 k개의 문자를 골라 임의의 순서로 재배치해야 합니다. 이때 선택하지 않은 나머지 문자들은 원래 위치에 그대로 유지되며, 이 전체 연산은 정확히 한 번만 수행합니다.목표는 문자열 S가 알파벳 순서(사전순)로 완전히 정렬되도록 만드는 k 값을 찾는 것입니다.예를 들어 입력이 S = acdb라고 한다면 출력은 3이 됩니다. 첫 번째 문자 a는 이미 올바른 위치에 있고, 나머지 세
문제 개요n개의 요소를 가진 배열 A가 있다고 가정해 보겠습니다. 함수 F(p)는 순열 p에서 인접한 두 요소들의 합을 모두 구한 뒤 오름차순으로 정렬한 배열로 정의됩니다. 즉, F(p) = sort([p₁+p₂, p₂+p₃, ..., pₙ₋₁+pₙ]) 입니다. 배열 A로 표현된 하나의 순열이 주어졌을 때, F(A)의 결과가 원래 배열과 완전히 동일한 다른 순열을 찾아야 합니다.예시입력이 A = [2, 1, 6, 5, 4, 3]이라면 출력은 [3, 4, 5, 6, 1, 2]가 될 수 있습니다. 그 이유를 살펴보겠습니다.F(A) =
문제 개요크기가 K인 배열 A가 있다고 가정해 보겠습니다. 이 게임에는 N명의 어린이와 게임 진행자가 등장하며, 게임은 총 K라운드로 구성됩니다. i번째 라운드에서 진행자는 A[i]명씩 그룹을 만들라고 선언합니다. 그러면 남아 있는 어린이들은 A[i]명으로 구성된 그룹을 최대한 많이 만들고, 한 명의 어린이가 여러 그룹에 동시에 속할 수는 없습니다. 그룹에 속하지 못한 어린이는 게임에서 탈락하며, 나머지는 다음 라운드로 진출합니다. 물론 탈락자가 한 명도 발생하지 않는 라운드도 있을 수 있습니다. 최종적으로 K번째 라운드가 끝난 후
N개의 요소로 이루어진 배열 A가 있다고 가정해 봅시다. 각 연산에서는 배열의 한 요소를 선택하여 1만큼 증가시키거나 1만큼 감소시킬 수 있습니다. 우리가 구해야 할 것은 다음 두 조건을 모두 만족하는 데 필요한 최소 연산 횟수입니다. 1부터 n까지의 모든 i에 대해, 첫 번째 항부터 i번째 항까지의 합(접두사 합)이 0이 아니어야 합니다. 1부터 n-1까지의 모든 i에 대해, 첫 번째 항부터 i번째 항까지의 합의 부호와 첫 번째 항부터 (i+1)번째 항까지의 합의 부호가 서로 반대여야 합니다. 예를 들어 입력 배열이 A = [
좌표 (x, y)가 주어졌을 때, 2차원 격자 위에 있는 로봇이 (0, 0) 위치에서 출발해 (x, y) 지점까지 이동하려고 합니다. 로봇은 위, 아래, 왼쪽, 오른쪽으로 움직이거나 현재 칸에 그대로 머무를 수 있으며, 가능한 한 적은 명령으로 목적지에 도달하는 것이 목표입니다. 이때 필요한 최소 단계 수를 구하는 것이 바로 이 문제의 핵심입니다.예를 들어 입력이 x = 3, y = 4라면 출력은 7이 됩니다.풀이 접근 방식이 문제는 다음 공식 하나로 간단하게 해결할 수 있습니다.x + y + (|x - y|, |x - y + 1|
N개의 원소를 가진 배열 A와 또 다른 값 K가 주어졌다고 가정해 봅시다. 0부터 K 범위 안의 정수 X에 대해 f(X) = (X xor A[1]) + (X xor A[2]) + ... + (X xor A[N])으로 정의할 때, f가 가질 수 있는 최댓값을 구하는 것이 우리의 목표입니다.예를 들어 입력이 K = 7, A = [1, 6, 3]이라면 출력은 14가 됩니다. 그 이유는 f(4) = (4 XOR 1) + (4 XOR 6) + (4 XOR 3) = 5 + 2 + 7 = 14이기 때문입니다.해결 접근 방식이 문제는 각 비트(b
두 개의 숫자 a와 b가 주어졌을 때, 임의의 값 x에 대해 (a XOR x) + (b XOR x)가 가장 작아지도록 만드는 최솟값을 구해야 합니다.예를 들어 입력이 a = 6, b = 12라면 출력은 10이 됩니다. x = 4일 때 (6 XOR 4) + (12 XOR 4) = 2 + 8 = 10이기 때문입니다.접근 방법이 문제의 핵심은 각 비트 자리를 독립적으로 분석하는 것입니다.a와 b의 해당 비트가 같은 경우: x의 그 비트를 같은 값으로 설정하면 두 XOR 결과가 모두 0이 되어 합에 아무것도 더해지지 않습니다.a와 b의 해
행이 H개, 열이 W개인 행렬이 있다고 가정해 보겠습니다. 각 칸에는 . 또는 # 문자가 들어 있는데, 점(.)은 통과할 수 있는 공간을, 샵(#)은 막혀 있는 블록을 의미합니다. 아말(Amal)은 자신의 집에서 시장으로 이동해야 하며, 집은 행렬의 왼쪽 맨 위(좌상단) 칸에, 시장은 오른쪽 맨 아래(우하단) 칸에 위치해 있습니다.아말은 상하좌우 인접한 칸으로 한 칸씩 이동할 수 있으며, 이동 대상 칸은 반드시 통과 가능한 칸이어야 합니다. 마을 밖으로 나갈 수 없고, 막힌 칸(#)에 들어가는 것도 불가능합니다. 다만 그의 신체 능
n개의 요소를 가진 배열 A와 m개의 요소를 가진 배열 B가 있다고 가정해 보겠습니다. 우리의 목표는 배열 A에서 한 요소 a를, 배열 B에서 한 요소 b를 선택하여 a + b의 값이 배열 A와 B 어느 쪽에도 존재하지 않도록 만드는 것입니다.예를 들어 입력이 A = [3, 2, 2], B = [1, 5, 7, 7, 9]라고 한다면, 출력은 [3, 1]이 될 수 있습니다. 3 + 1 = 4는 어떤 배열에도 존재하지 않기 때문입니다. 물론 정답은 하나만 있는 것이 아니며, 3 + 9 = 12처럼 다른 조합 역시 유효한 답이 될 수 있
n개의 요소를 가진 배열 A가 있다고 가정해 봅시다. 어느 전자 제품 매장에서 지난밤 도난 사건이 발생했습니다. 매장에 있던 모든 키보드는 특정 정수 x부터 시작하여 오름차순으로 번호가 매겨져 있었습니다.예를 들어 x=4이고 매장에 키보드가 3개 있었다면, 기기들의 번호는 4, 5, 6이 됩니다. 마찬가지로 x=10이고 키보드가 7개였다면 번호는 10, 11, 12, 13, 14, 15, 16입니다. 도난 사건 이후에는 n개의 키보드만 남았으며, 남아 있는 키보드들의 번호가 배열 A에 저장되어 있습니다. 우리가 구해야 할 것은 바로
n개의 요소를 가진 배열 A가 있다고 가정해 보겠습니다. A[i]는 i번째 학생의 프로그래밍 실력을 나타내며, 배열의 모든 요소는 서로 다릅니다. 우리는 이 학생들을 다음 조건에 맞게 팀으로 나누려고 합니다.|A[i] - A[j]| = 1인 두 학생 i와 j가 같은 팀에 속하지 않도록 합니다.팀의 수는 가능한 한 최소여야 합니다.예를 들어 입력이 A = [2, 3, 4, 99, 100]이라면 출력은 2가 됩니다. 그룹이 [2, 3, 4]와 [99, 100]으로 나뉘기 때문입니다.풀이 접근 방식이 문제를 해결하기 위해 다음 단계를 따