크기가 n × 4인 2차원 배열이 있다고 가정해 보겠습니다. 학생은 총 n명이며, 각 학생에게는 0부터 n-1까지의 고유 ID가 부여되어 있습니다. 또한 모든 학생은 영어, 지리, 수학, 역사 네 과목의 점수를 가지고 있습니다. 성적표에서 학생들은 네 과목 점수의 합계를 기준으로 내림차순 정렬되며, 합계가 같은 학생이 둘 이상일 경우에는 ID 오름차순으로 정렬됩니다. 우리가 구해야 하는 값은 바로 ID가 0인 학생의 최종 순위입니다. 예를 들어 입력이 아래와 같다고 해봅시다. 100981001001001001001009099901
문제 개요세 개의 숫자 a, b, c가 주어집니다. 각각 레몬 a개, 사과 b개, 배 c개를 의미합니다. 컴포트(compote, 설탕에 절인 과일)를 만들려면 과일의 비율이 반드시 1 : 2 : 4를 유지해야 하며, 과일을 잘라서 사용할 수는 없습니다. 이때 컴포트를 만드는 데 사용할 수 있는 레몬, 사과, 배의 최대 총 개수를 구하는 것이 목표입니다. 만약 어떤 과일 조합도 만들 수 없다면 0을 반환합니다.예를 들어 입력이 a = 4, b = 7, c = 13이라면 출력은 21입니다. 레몬 3개, 사과 6개, 배 12개를 사용하면
소문자 영어 알파벳 n개로 이루어진 문자열 S가 있다고 가정해 봅시다. 우리는 S의 문자들을 재배열하여, 결과 문자열에서 trygub가 부분 수열(subsequence)로 나타나지 않도록 만들어야 합니다.예를 들어, 입력이 S = pintontrygubabc라면 출력은 abbcginnoprttuy가 됩니다.해결 접근 방법이 문제는 의외로 아주 간단하게 해결할 수 있습니다. 다음 두 단계만 거치면 됩니다.문자열 S를 오름차순으로 정렬한다 정렬된 S를 반환한다왜 정렬만으로 해결될까요?문자열을 알파벳 순서로 정렬하면 모든 문자가 사전순으
문제 이해하기세 개의 정수 y, b, r이 주어집니다. 각각 노란색 장식 y개, 파란색 장식 b개, 빨간색 장식 r개를 의미합니다. 장식이 아름답다고 판단되려면 다음 조건을 만족해야 합니다.사용된 파란색 장식의 개수는 노란색 장식의 개수보다 정확히 1개 더 많아야 합니다.사용된 빨간색 장식의 개수는 파란색 장식의 개수보다 정확히 1개 더 많아야 합니다.즉, 노란색 장식을 n개 사용한다면 파란색은 n+1개, 빨간색은 n+2개를 사용해야 합니다. 우리의 목표는 이 조건을 지키면서 가능한 한 많은 장식을 사용하는 것이며, 그때의 총 장식
소문자 n개로 이루어진 문자열 S가 있다고 가정해 보겠습니다. 어떤 문자열이 영어 알파벳의 연속된 글자들로 구성되어 있고 각 글자가 정확히 한 번씩만 나타난다면, 이를 다양한(diverse) 문자열이라고 부릅니다. 단, a와 z는 서로 인접하지 않은 것으로 간주합니다. 우리는 주어진 문자열이 다양한 문자열인지 아닌지 판별해야 합니다.예를 들어 입력 문자열이 fced라면 출력은 True입니다. fced를 정렬하면 cdef가 되는데, 알파벳이 연속적으로 배치되어 있고 중복 글자도 없기 때문입니다.해결 접근 방법이 문제는 다음 단계를 통
하나의 숫자 n이 주어졌을 때, 다음 두 조건을 동시에 만족하는 세 숫자 a, b, c를 찾는 것이 목표입니다.세 숫자의 합이 n이 되어야 합니다. 즉, a + b + c = n세 숫자 중 어느 것도 3의 배수가 아니어야 합니다.예를 들어 입력이 n = 233이라면, 프로그램은 [1, 2, 230]을 출력합니다. 실제로 1 + 2 + 230 = 233이고, 세 숫자 모두 3으로 나누어 떨어지지 않으므로 조건을 만족합니다.문제 해결 접근 방식이 문제는 간단한 수학적 관찰만으로 O(1) 시간 안에 해결할 수 있습니다. 핵심 아이디어는
숫자 x가 주어졌다고 가정해 봅시다. 우리에게는 면에 2부터 7까지의 숫자가 적혀 있는 육면체 주사위가 하나 있습니다. 목표는 주사위를 굴려 나온 눈금을 모두 더했을 때 정확히 x점을 만드는 것입니다.여기서 중요한 점은 굴리는 횟수 자체에는 제약이 없다는 것입니다. 즉, 합계가 정확히 x점이 되기만 한다면 몇 번을 굴리든 상관없으며, 가능한 굴림 횟수 중 아무거나 하나만 구하면 됩니다. 운이 아주 좋아서 선택한 횟수로 x점을 만들 확률이 0이 아니라면 반드시 그렇게 굴릴 수 있다고 가정하므로, 우리는 그 횟수를 찾아 출력하기만 하면
문제 설명두 숫자 l과 r가 주어졌을 때, 다음 조건을 모두 만족하는 쌍 (x, y)를 찾는 것이 목표입니다.l ≤ x, y ≤ r (두 수 모두 구간 안에 있어야 함)x ≠ y (두 수는 서로 달라야 함)x는 y를 나누어 떨어지게 함 (즉, y는 x의 배수)조건을 만족하는 답이 여러 개라면 그중 아무거나 하나만 출력하면 됩니다.예를 들어 l = 3, r = 14가 입력으로 주어지면, (3, 6) 또는 (3, 9)처럼 3의 배수를 포함하는 쌍을 출력할 수 있습니다.접근 방법이 문제의 핵심 아이디어는 매우 간단합니다. 구간 [l, r
두 종류의 문자 S와 F로 구성된 문자열 S가 주어진다고 가정해 보겠습니다. S[i]가 S라면 i번째 날에 시애틀(Seattle)에 있는 것이고, F라면 플로리다(Florida)에 있는 것입니다. 이때 우리가 확인해야 할 것은 시애틀에서 플로리다로 이동한 횟수가 플로리다에서 시애틀로 이동한 횟수보다 많은지입니다.예를 들어 입력이 S = SSFFSFFSFF라면 출력은 True가 됩니다.접근 방법이 문제는 간단한 관찰 하나로 해결할 수 있습니다. 시애틀과 플로리다 사이를 오가려면 반드시 왕복으로 이동해야 하기 때문에, 전체 여정의 시작
어떤 숫자 n이 주어졌다고 가정해 봅시다. 게임 속 모든 캐릭터는 네 가지 체력(HP) 등급 중 하나에 속하며, 각 등급은 다음과 같이 분류됩니다.카테고리 A : HP가 (4n + 1) 형태인 경우카테고리 B : HP가 (4n + 3) 형태인 경우카테고리 C : HP가 (4n + 2) 형태인 경우카테고리 D : HP가 4n 형태인 경우이 네 가지 카테고리는 A > B > C > D 순서로 높은 등급을 나타냅니다. 즉, 카테고리 A가 가장 높고 카테고리 D가 가장 낮습니다.게임을 진행하는 동안 플레이어는 캐릭터의 HP
문제 설명 n개의 요소를 가진 배열 A가 있다고 가정해 보겠습니다. 판 위에 n개의 숫자가 적혀 있고, 아말(Amal)과 비말(Bimal)이 번갈아 가며 턴제 게임을 진행합니다. 각 턴마다 두 사람은 숫자 하나를 골라 판에서 제거합니다. 아말이 먼저 시작하며, 아말은 마지막까지 남는 숫자를 최소화하려고 하고, 비말은 이를 최대화하려고 합니다. 우리가 구해야 할 것은 최종적으로 판에 남게 되는 숫자입니다. 예를 들어 입력이 A = [2, 1, 3]이라면 결과는 2가 됩니다. 아말이 먼저 3을 제거하고, 비말이 1을 제거하면 최종적으
n개의 카드와 크기가 각각 k1, k2인 두 배열 A와 B가 주어진다고 가정해 봅시다. Amal과 Bimal이 흥미로운 카드 게임을 하고 있는 상황입니다. 카드는 총 n장으로 1부터 n까지 번호가 매겨져 있으며, 처음에 두 사람에게 나누어집니다.게임의 진행 방식은 다음과 같습니다. 매 턴마다 각 플레이어는 자신이 가진 카드 중 원하는 카드 하나를 골라, 상대방이 어떤 카드를 냈는지 보지 못한 상태로 테이블에 놓습니다. 이후 두 카드가 동시에 공개되고, 더 큰 숫자가 적힌 카드를 낸 플레이어가 두 카드를 모두 가져갑니다. 여기서 중요
문제 설명소문자로만 구성된 길이 n의 문자열 S가 주어졌을 때, 다음 조건을 모두 만족하는 두 개의 비어 있지 않은 부분 문자열 P와 Q를 찾아야 합니다.P와 Q는 모두 S의 부분 수열(subsequence)이어야 합니다.각 인덱스 i에 대해 S[i]는 P와 Q 중 정확히 하나에만 속해야 합니다.P는 사전순(lexicographically)으로 가능한 한 가장 작아야 합니다.예를 들어 입력이 S = thelightsaber라고 한다면, 출력은 a, thelightsber가 됩니다. 문자열 전체에서 사전순으로 가장 작은 문자인 a를
두 개의 숫자 n과 k가 주어진 상황을 생각해 봅시다. 파티에 초대할 친구가 총 n명 있습니다. 아말(Amal)은 종이접기(오리가미) 형태의 초대장을 직접 만들어 전달하려고 합니다.초대장 한 장을 만들기 위해 필요한 재료는 다음과 같습니다.빨간색 종이 2장초록색 종이 5장파란색 종이 8장각 색상별 공책은 무한히 많이 구할 수 있지만, 한 권의 공책에는 오직 한 가지 색상의 종이 k장만 들어 있습니다. 이때 아말이 모든 친구 n명에게 초대장을 전달하기 위해 구매해야 하는 최소 공책 수를 구하는 것이 문제입니다.문제 예시예를 들어 입력
문제 개요두 개의 좌표 (x1, y1)과 (x2, y2)가 주어졌다고 가정해 보겠습니다. 토끼는 먹이 상자를 끌고 이동하며, 길이가 1인 밧줄로 상자에 연결되어 있습니다. 토끼는 상자를 자신이 서 있는 위치까지 당긴 후, 같은 방향으로 1칸 이동하여 길을 비켜줍니다. 또한 상자를 당기지 않은 상태에서도 오른쪽, 왼쪽, 위, 아래 어느 방향으로든 1칸씩 자유롭게 이동할 수 있으며, 이때 상자와 정확히 1칸 거리를 유지할 필요는 없습니다. 다만 상자를 다시 당기려면 반드시 상자 바로 옆 칸으로 이동해야 합니다.토끼는 원하는 어느 지점에
문제 개요숫자 n이 주어졌을 때, 크기가 n인 배열 A를 찾아야 합니다. 총 n개의 테이블이 있으며, 각 테이블에는 의자가 4개씩 배치되어 있고, 의자에는 1부터 4n까지 번호가 매겨져 있습니다.번호가 a와 b(a ≠ b)인 의자에 앉은 두 아이는 다음 조건 중 하나라도 만족하면 서로 장난을 치게 됩니다.gcd(a, b) = 1 인 경우 (두 수가 서로소)a가 b를 나누거나, b가 a를 나누는 경우따라서 우리는 어떤 두 아이도 장난을 칠 수 없도록 아이들의 자리를 배정해야 합니다. 다시 말해, 위 조건을 만족하지 않는 의자 번호들의
문제 개요두 숫자 a와 b가 있다고 가정해 봅시다. Amal은 항상 TV 볼륨을 b 값으로 설정하지만, 어느 날 Bimal이 볼륨을 a 값으로 변경해 버렸습니다. 리모컨에는 여섯 개의 버튼(-5, -2, -1, 1, 2, 5)이 있으며, 이 버튼들을 사용하면 볼륨을 1, 2 또는 5씩 증가시키거나 감소시킬 수 있습니다. 볼륨 값은 매우 클 수 있지만 음수가 될 수는 없습니다.우리는 Amal이 볼륨을 다시 b로 맞추기 위해 눌러야 하는 최소 버튼 클릭 횟수를 구해야 합니다.예를 들어 입력이 a = 5, b = 14라면 출력은 3이 됩
문제 개요이번 문제에서는 n개의 요소(n은 홀수)를 가진 배열 A를 다룹니다. 배열 A에는 1부터 n까지의 자연수가 순열(permutation) 형태로 들어 있습니다. 또한 함수 f(i)가 정의되어 있는데, 이 함수는 0부터 n-2 범위의 인덱스 i 하나를 인자로 받아 다음 연산을 수행합니다.만약 A[i] > A[i+1]이라면, 두 값을 서로 교환(swap)합니다.우리가 구해야 할 값은 배열 A가 처음으로 완전히 정렬된 상태가 되기까지 필요한 반복(iteration) 횟수입니다.예를 들어 입력이 A = [4, 5, 7, 1,
문제 개요 n개의 숫자로 이루어진 문자열 S가 주어졌을 때, 부분 문자열이 나타내는 숫자가 짝수라면 그 부분 문자열을 짝수 부분 문자열이라고 정의합니다. 우리의 목표는 문자열 S에서 짝수 부분 문자열의 총 개수를 구하는 것입니다. 예를 들어, 입력이 S = 1234라고 가정해 보겠습니다. 이 경우 출력값은 6이며, 해당되는 부분 문자열은 2, 4, 12, 34, 234, 1234입니다. 접근 방법 이 문제의 핵심 아이디어는 매우 간단합니다. 어떤 수가 짝수이려면 반드시 마지막 자릿수가 짝수여야 합니다. 즉, 부분 문자열이 짝수인지
가수가 1분짜리 노래 a곡, 2분짜리 노래 b곡, 3분짜리 노래 c곡을 가지고 있다고 가정해 보겠습니다. 이 가수는 모든 노래를 두 개의 콘서트에 나누려고 하며, 각 노래는 반드시 정확히 하나의 콘서트에만 포함되어야 합니다. 목표는 두 콘서트 길이의 절대 차이를 최소한으로 만드는 것입니다. 여기서 콘서트의 길이란 해당 콘서트에 포함된 모든 노래 길이의 합을 의미하며, 우리는 두 콘서트 길이 차이의 최솟값을 구해야 합니다.예를 들어 입력이 a = 2, b = 1, c = 3이라면 출력은 1이 됩니다. 첫 번째 콘서트에 1분짜리 노래