숫자 n이 주어졌다고 가정해 봅시다. 우리는 n개의 원소를 가진 배열 A를 만들어야 합니다. 이때 배열 A는 다음 세 가지 조건을 만족해야 합니다.배열은 오름차순으로 정렬되어 있어야 합니다.모든 원소는 서로 중복되지 않아야 합니다.배열 인덱스가 1부터 시작한다고 할 때, i가 2부터 n까지인 모든 i에 대해 A[i]는 A[i-1]로 나누어 떨어지지 않아야 합니다.예를 들어 입력이 n = 7이라면 출력은 다음과 같습니다.[2, 3, 4, 5, 6, 7, 8]접근 방법이 문제는 생각보다 아주 간단하게 해결할 수 있습니다. 바로 2부터
쌍(pair)으로 이루어진 배열 P가 있다고 가정해 보겠습니다. 여기서 P[i]는 (l, r) 형태를 가지며, 또 하나의 숫자 k가 주어집니다. n개의 챕터로 구성된 책을 읽으려고 하는데, 책의 각 페이지는 정확히 하나의 챕터에 속하고 각 챕터는 최소 한 페이지 이상을 포함합니다. 일부 페이지를 이미 읽었으며, k번 페이지는 아직 읽지 않은 첫 번째 페이지로 표시되어 있습니다. 이때 우리가 구해야 할 값은 아직 완전히 읽지 못한 챕터의 개수입니다. 배열 P의 각 원소는 해당 챕터의 페이지 번호 범위를 나타냅니다.예를 들어 입력이 P
길이가 n-1인 배열 D와 두 개의 값 a, b가 주어져 있다고 가정해 봅시다. 어떤 군대에는 1부터 n까지 번호가 매겨진 n개의 계급이 존재하며, 계급 i에서 계급 i+1로 진급하는 데는 D[i]년이 필요합니다. 아말(Amal)은 방금 계급 a에 도달했지만, 실제 목표는 계급 b입니다. 우리는 그가 목표 계급에 도달하기까지 필요한 총 년수를 계산해야 합니다.예를 들어 입력이 D = [5, 6]; a = 1; b = 3과 같다면, 출력은 11이 됩니다.이 문제는 다음 단계를 따라 해결할 수 있습니다 -n := size of D s
문제 개요세 개의 숫자 x, y, z가 주어진 상황을 가정해 봅시다. 어떤 리뷰 사이트에서 x명은 추천(upvote)을 할 예정이고, y명은 비추천(downvote)을 할 예정입니다. 그리고 추가로 z명이 투표를 하긴 하지만, 이들이 추천을 할지 비추천을 할지는 알 수 없습니다. 각 사람은 최대 한 번만 투표할 수 있습니다.투표 결과는 다음과 같이 결정됩니다.추천 수가 비추천 수보다 많으면 +비추천 수가 더 많으면 -두 수가 같으면 0그런데 z명의 투표 성향을 알 수 없기 때문에 결과가 불확실할 수 있습니다. 즉, z명이 어떻게 투
숫자 x가 주어졌을 때, 아래 세 가지 조건을 모두 만족하는 두 정수 a와 b를 찾아야 합니다.a와 b는 모두 1부터 x 사이의 값이어야 합니다.a는 b로 나누어 떨어져야 합니다.a × b > x를 만족하면서, 동시에 a ÷ b < x를 만족해야 합니다.만약 이러한 두 수가 존재하지 않으면 -1을 출력합니다. 예를 들어 x = 10이 입력으로 주어지면, a = 10, b = 10이라는 답을 얻을 수 있습니다(물론 다른 조합도 가능합니다).접근 방법이 문제는 의외로 간단하게 해결할 수 있습니다. 핵심 아이디어는 a와 b를
숫자 n이 하나 주어져 있다고 가정해 봅시다. 그리고 다음과 같은 가설이 있다고 합니다.모든 양의 정수 m에 대하여 (n · m + 1)이 항상 소수가 되는 양의 정수 n이 존재한다.우리의 목표는 이 명제를 반증할 수 있는 반례(counterexample)가 되는 m을 찾는 것입니다.문제 예시입력으로 n = 12가 주어진다면, 출력은 10이 됩니다. 그 이유는 12 × 10 + 1 = 121이 되는데, 121은 11 × 11로 나누어지므로 소수가 아니기 때문입니다.접근 방법 및 풀이 단계이 문제는 복잡한 소수 판별 과정 없이 간단한
세 개의 정수 a, b, c가 주어졌다고 가정해 봅시다. 각각 a개, b개, c개의 돌이 들어 있는 세 개의 돌 더미가 있으며, 우리는 다음 두 가지 연산을 반복해서 수행할 수 있습니다.첫 번째 더미에서 돌 1개, 두 번째 더미에서 돌 2개를 가져옵니다. (단, 각 더미에 필요한 만큼의 돌이 남아 있어야 합니다)두 번째 더미에서 돌 1개, 세 번째 더미에서 돌 2개를 가져옵니다. (단, 각 더미에 필요한 만큼의 돌이 남아 있어야 합니다)이때, 위 연산들을 통해 수집할 수 있는 돌의 최대 개수를 구해야 합니다.예를 들어 입력이 a =
두 개의 숫자 n과 x가 주어진 상황을 생각해 봅시다. 칠판에는 처음 n개의 자연수(1부터 n까지)가 차례대로 적혀 있습니다.i번째(i는 1부터 시작) 연산에서는 칠판에 적힌 수들 중 i번째 위치에 있는 숫자를 지웁니다. 이 과정을 반복하다가 칠판에 남아 있는 숫자의 개수가 i보다 작아지면 제거 작업을 중단합니다. 우리가 구해야 할 것은 바로 이 시점 이후 칠판에 남아 있는 수열의 x번째 숫자입니다.예제로 이해하기입력이 n = 69, x = 6이라고 가정해 보겠습니다. 이때 출력은 12가 됩니다.첫 번째 연산(i = 1): 칠판의
n개의 요소를 가진 배열 A와 하나의 숫자 k가 주어졌다고 가정해 보겠습니다. 여기서 행운의 숫자(lucky number)란 십진수 표현에서 오직 행운의 자릿수인 4와 7만으로 이루어진 양의 정수를 의미합니다. 우리가 구해야 할 것은 주어진 n개의 양의 정수 중에서, 4 또는 7로 이루어진 자릿수(행운의 자릿수)가 k개 이하인 수가 몇 개인지 세는 것입니다. 예를 들어 입력이 A = [44, 74, 474, 154], k = 2라고 해봅시다. 이때 출력은 3이 됩니다. 44: 행운의 자릿수 2개 (4, 4) → 조건 만족 74:
문제 설명세 개의 숫자 n, m, z가 주어진다고 가정해 봅시다. 어떤 사무실은 n분마다 고객으로부터 전화를 받고, m분마다 배송 주문이 도착합니다. 사무실은 총 z분 동안 운영됩니다.우리가 구해야 하는 것은, 고객이 전화를 걸어올 때 아직 처리되지 않은 주문이 남아 있지 않도록 하기 위해 최소한 몇 번의 주문을 수거해야 하는지입니다. 단, 주문을 접수하고 고객과 통화하는 데는 정확히 1분이 걸린다고 가정합니다.예를 들어 입력이 n = 1, m = 2, z = 5라면 출력은 2가 됩니다. 2분째와 4분째에 도착하는 주문을 수거해야
문제 개요이 문제에서는 숫자 m과 n개의 부분 리스트로 이루어진 중첩 리스트 A가 주어집니다. 총 m개의 전구가 있으며, 처음에는 모두 꺼져 있는 상태입니다. 또한 n개의 스위치가 있고, 각 스위치는 특정 전구들과 연결되어 있습니다. 즉, A[i]는 i번째 스위치를 눌렀을 때 켜질 수 있는 전구들의 집합을 의미합니다. 우리가 확인해야 할 것은 스위치들을 적절히 눌러서 모든 전구를 켤 수 있는지 여부입니다.예를 들어 입력이 A = [[1, 4], [1, 3, 1], [2]], m = 4라고 한다면 출력은 True가 됩니다. 세 개의
문제 이해숫자 n이 주어졌다고 가정해 봅시다. 우리는 이 숫자를 합이 n이 되도록 하나 이상의 0이 아닌 자릿수(1~9)로 분할하려고 합니다. 이때 목표는 사용되는 서로 다른 자릿수의 종류가 최소가 되는 해를 찾는 것입니다.예를 들어 입력이 n = 13이라면, 출력은 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]이 됩니다.접근 방법이 문제의 핵심은 자릿수의 개수가 아니라 종류를 최소화하는 데 있습니다. 숫자 1만 반복해서 사용하면 어떤 n에 대해서도 서로 다른 자릿수의 종류는 단 한 가지(1)뿐이며, 이것보
0 또는 1의 값을 가지는 n개의 요소로 이루어진 배열 A가 있다고 가정해 보겠습니다. 여기에 나무가 하나 있고, 연속된 n일 동안 A[i]가 0이면 물을 주지 않고, 1이면 물을 줍니다. 나무는 다음과 같은 규칙에 따라 성장합니다.이틀 연속으로 물을 주지 않으면 나무는 죽습니다.i번째 날에 물을 주면 1cm 자랍니다.i번째 날과 (i+1)번째 날에 연속으로 물을 주면 1cm 대신 5cm 자랍니다.i번째 날에 물을 주지 않으면 그날은 자라지 않습니다.나무의 초기 높이는 1cm입니다. 우리의 목표는 n일 후 나무의 최종 높이를 구하는
문제 개요크기가 n인 배열 A가 있다고 가정해 봅시다. 어떤 코딩 대회에 총 n명의 학생이 참가하며, 대회 시작 전 각 학생은 양의 정수 형태의 평점(레이팅)을 하나씩 가지고 있습니다. 여기서 A[i]는 i번째 학생의 평점을 의미합니다.대회가 종료되면 모든 학생은 양의 정수로 표현되는 최종 순위를 하나씩 부여받습니다. 우리는 학생들이 자신의 평점에 맞게 순위를 차지할 것이라고 기대합니다. 즉, 학생 A의 평점이 학생 B보다 엄격하게 낮다면, A는 반드시 B보다 엄격하게 뒤처진(더 큰 번호의) 순위를 받아야 합니다. 이 문제의 목표는
숫자 n이 주어졌을 때, 아말(Amal)은 반려동물에게 이름을 지어주려고 합니다. 이름은 알고리즘에 따라 결정되며, 길이는 정확히 n자입니다.이름을 구성하는 규칙은 다음과 같습니다.이름의 i번째 문자 위치(1부터 n까지 번호 매김)i가 피보나치 수라면 대문자 O를 사용그렇지 않다면 소문자 o를 사용예시예를 들어 n = 10이 입력으로 주어지면, 피보나치 수열의 첫 번째 항들은 1, 2, 3, 5, 8... 이므로 출력 결과는 다음과 같습니다.OOOoOooOoo1번째, 2번째, 3번째, 5번째, 8번째 자리만 대문자 O이고 나머지는
n개의 요소를 가진 배열 A와 정수 d가 주어졌다고 가정해 봅시다. 한 농부가 농장에 n개의 건초 더미를 배치했으며, i번째 더미에는 A[i]개의 건초가 들어 있습니다.매일 소는 어떤 더미에서 인접한 더미로 건초 하나를 옮길 수 있습니다. 물론 하루에 아무 작업도 하지 않을 수도 있습니다. 소의 목표는 d일 안에 첫 번째 더미의 건초 수를 최대한 많이 만드는 것이며, 우리는 d일 후 첫 번째 더미에 존재할 수 있는 최대 건초 개수를 계산해야 합니다.예를 들어 입력이 d = 5, A = [1, 0, 3, 2]라고 해봅시다. 이 경우
두 언어의 차이점을 본격적으로 살펴보기에 앞서, 먼저 C++과 Go가 각각 어떤 언어인지 개념부터 이해해 보겠습니다.Go란 무엇인가?Go는 Google 직원들이 개발한 오픈 소스 프로그래밍 언어입니다. 빠른 컴파일 속도, 가비지 컬렉션(Garbage Collection), 강력한 타입 시스템, 그리고 동시성(Concurrency) 프로그래밍에 대한 명확한 지원을 목표로 설계되었습니다.최초 개발자인 롭 파이크(Rob Pike), 로버트 그리즈머(Robert Griesemer), 켄 톰슨(Ken Thompson)은 2007년에 개발을
이 문제에서는 n개의 행과 m개의 열로 이루어진 행렬이 주어집니다. 우리가 해야 할 일은 이 행렬에 포함된 요소(원소)의 총 개수를 구하고, 그 값을 출력하는 것입니다.예를 들어 입력이 n = 20, m = 15라면, 행렬에는 20 × 15 = 300개의 요소가 존재하므로 출력 결과는 300이 됩니다.해결 방법행렬의 요소 개수는 단순히 행의 개수와 열의 개수를 곱하면 되기 때문에, 이 문제는 매우 간단하게 해결할 수 있습니다.행의 개수 n과 열의 개수 m을 입력받습니다.n과 m을 곱한 값을 반환합니다.return n * m;구현 예
문제 개요크기가 n인 배열 arr에 양의 정수들이 저장되어 있다고 가정해 봅시다. 우리가 해야 할 작업은 배열 안에서 짝수를 찾아 각각 1씩 감소시킨 뒤, 처리가 완료된 배열을 출력하는 것입니다.예를 들어, 입력이 n = 7, arr = {10, 9, 7, 6, 4, 8, 3}이라면 최종 출력 결과는 9 9 7 5 3 7 3이 됩니다. 원래 짝수였던 10, 6, 4, 8이 각각 1씩 줄어들어 9, 5, 3, 7로 바뀐 것을 확인할 수 있습니다.해결 접근 방식이 문제는 간단한 반복문과 조건문만으로 해결할 수 있습니다. 핵심 로직은 다
문제 소개2개의 행과 n개의 열로 이루어진 그리드가 있다고 가정해 보겠습니다. 로봇은 그리드의 (0, 0) 위치에 있으며, 현재 위치에서 인접한 칸이나 대각선(모서리) 칸으로 이동하면서 (1, n - 1) 지점에 도달하려고 합니다.그리드는 문자열 배열로 주어지며, 각 칸은 다음과 같이 표시됩니다.# : 막혀 있어 지나갈 수 없는 칸. : 자유롭게 이동할 수 있는 칸우리가 확인해야 할 것은 로봇이 (0, 0)에서 출발하여 (1, n - 1) 칸에 도달할 수 있는지 여부입니다.예를 들어, n = 4이고 grid = {.##., ....