이 문제에서는 크기가 N인 배열 arr[]가 주어집니다. 배열에는 1부터 N-1까지의 값이 들어 있으며, 단 하나의 값만 두 번 반복하여 나타납니다. 우리의 목표는 크기 n인 정렬된 배열에서 유일한 중복(반복) 요소를 찾는 것입니다.예시를 통해 문제를 이해해 보겠습니다.입력arr[] = {1, 2, 3, 4, 5, 5, 6, 7}출력5풀이 접근 방법 1: 선형 탐색가장 간단한 방법은 선형 탐색(linear search)을 사용하는 것입니다. 배열을 순회하면서 인접한 두 요소 arr[i]와 arr[i+1]의 값을 비교합니다. 두 값이
문제 설명이 문제에서는 크기가 N인 정렬되지 않은 배열 arr[]가 주어집니다. 배열에는 1부터 N-1까지의 값이 모두 포함되어 있으며, 그중 하나의 값이 두 번 나타납니다. 우리의 목표는 1부터 n-1 사이에서 유일하게 반복되는 요소를 찾는 것입니다.예제를 통해 문제를 이해해 보겠습니다.입력arr[] = {3, 5, 4, 1, 2, 1}출력1풀이 방법 1: 브루트 포스(이중 반복문)가장 직관적인 해결 방법은 배열을 순회하면서 각 값에 대해 동일한 요소가 배열의 다른 위치에도 존재하는지 확인하는 것입니다. 두 번 나타나는 값을 발견
이 문제에서는 한 선분의 시작점 A(xA, yA)와 중점 M(xM, yM)의 좌표가 주어집니다. 우리의 과제는 한쪽 끝점과 중점이 주어졌을 때 선분의 다른 끝점을 찾는 것입니다.문제를 이해하기 위해 예시를 살펴보겠습니다.입력A = [1, 2], M = [3, 0]출력[5, -2]설명해당 선분은 다음과 같습니다.해결 방법이 문제는 수학 시간에 배운 기하학 개념을 활용하여 해결할 수 있습니다. 기억하시겠지만 모든 선분에는 중점 공식이 존재합니다.mid(x) = (x1 + x2) / 2 mid(y) = (y1 + y2) / 2하지만 이
문제 개요 이 문제에서는 중복 없는 고유한 값들로 이루어진 두 배열 arr1[]과 arr2[]가 주어집니다. 우리의 목표는 두 배열에 공통으로 존재하는 원소들의 합(겹치는 합)을 구하는 것입니다. 공통 원소는 양쪽 배열에서 각각 한 번씩 등장하므로, 해당 값은 합계에 두 번 더해진다는 점에 유의해야 합니다. 예제로 문제 이해하기 입력: arr1[] = {5, 4, 9, 2}, arr2[] = {6, 3, 9, 4} 출력: 26 설명: 두 배열에 모두 존재하는 원소는 9와 4입니다. 따라서 최종 합은 9 + 9 + 4 + 4 = 2
이 문제에서는 크기가 N인 배열 arr[]와 정수 M이 주어집니다. 우리의 목표는 배열에서 마지막으로 제거되는 요소의 위치를 찾는 것입니다.요소 제거 규칙배열에서 값을 제거하는 작업은 다음 규칙에 따라 진행됩니다.배열의 요소 arr[i]를 확인했을 때, arr[i] > M이라면 해당 값을 제거하고 arr[i] − M을 계산하여 배열의 맨 뒤에 추가합니다.만약 arr[i] ≤ M이라면, 해당 값은 새로 추가되지 않고 그대로 제거됩니다.위 작업은 배열이 완전히 빌 때까지 반복해서 수행합니다.예제로 문제 이해하기입력arr[]
문제 소개크기가 N인 배열 arr[]이 주어집니다. 배열에는 1부터 N까지의 정수가 담겨 있지만, 그중 한 숫자 x는 빠져 있고(누락), 대신 다른 숫자 y 하나가 두 번 등장합니다(반복). 이 글에서는 두 개의 방정식을 활용해 반복되는 숫자와 누락된 숫자를 찾는 방법을 알아보겠습니다.예제를 통해 문제를 살펴보겠습니다.입력arr[] = {1, 2, 3, 3}출력누락된 숫자 = 4, 반복 숫자 = 3해결 접근 방식: 두 개의 방정식 세우기핵심 아이디어는 간단합니다. 누락된 값 x와 반복 값 y에 관한 두 개의 방정식을 만든 뒤, 이를
이 문제에서는 각 행의 요소가 오름차순으로 정렬된 이진 행렬(binary matrix)이 주어집니다. 우리의 목표는 1의 개수가 가장 많은 행을 찾는 것입니다. 문제 예시 구체적인 예시를 통해 문제를 이해해 보겠습니다. 입력: mat[][] = {{ 0 1 1 1} {1 1 1 1} {0 0 0 1} {0 0 1 1}} 출력: 1 설명: 행렬의 각 행에 포함된 1의 개수 : 0행 : 3개 1행 : 4개 2
이 문제에서는 정수 N이 주어졌을 때, C++ 프로그램을 이용해 N번째 비피보나치 수(Non-Fibonacci Number), 즉 피보나치 수열에 속하지 않는 N번째 수를 구하는 것이 목표입니다.피보나치 수열의 기본 개념피보나치 수열은 앞의 두 수를 더해 다음 수를 만들어 가는 수열입니다. 수열은 F0과 F1이라는 두 초기값에서 시작하며, 초기값은 일반적으로 0과 1 또는 1과 1로 설정합니다.문제 예시입력:N = 5출력:10설명: 피보나치 수열에 포함되지 않는 수는 4, 6, 7, 9, 10, 11, 12, … 순서로 나열됩니다.
문제 개요 이 문제에서는 하나의 정수 N이 주어지며, 우리의 목표는 다음 수열의 N번째 항을 구하는 것입니다. 14, 28, 20, 40, 32, 64, 56, 112… 예시를 통해 문제를 살펴보겠습니다. 입력: N = 6 출력: 64 접근 방법 수열의 N번째 항을 구하려면 먼저 수열의 일반항을 파악해야 하며, 이를 위해서는 수열을 면밀히 관찰해야 합니다. 다행히 이 수열은 두 가지 서로 다른 방법으로 해결할 수 있습니다. 방법 1: 홀수·짝수 위치별 분석 이 수열은 홀수 번째 위치와 짝수 번째 위치에서 각각 다른 규칙
이 문제에서는 N개의 구간(range)이 주어지며, 우리의 목표는 N개의 구간에서 가장 많이 등장하는 정수를 찾는 것입니다.각 구간은 시작 값과 끝 값을 가집니다. 이 구간들에 포함된 정수 중 어떤 값이 가장 자주 나타나는지 구해야 합니다.문제 이해를 위한 예시입력S1 = 1, E1 = 3S2 = 2, E2 = 6S3 = 3, E3 = 4출력3설명구간 [1, 3]에는 1, 2, 3이 포함되고, 구간 [2, 6]에는 2, 3, 4, 5, 6이, 구간 [3, 4]에는 3, 4가 포함됩니다. 이때 정수 3은 세 구간 모두에 등장하여 총
이 문제에서는 N개의 정렬된 정수 값으로 이루어진 배열 arr[]와 하나의 정수 k가 주어집니다. 우리의 목표는 정렬된 배열에서 k보다 큰 요소의 개수를 찾는 것입니다.문제 이해하기예제를 통해 문제를 자세히 살펴보겠습니다.입력arr[] = {1, 2, 5, 7, 8, 9}, k = 4출력4설명k = 4보다 큰 요소는 다음과 같습니다. 5, 7, 8, 9해결 방법 1: 선형 탐색가장 단순한 해결 방법은 배열을 처음부터 끝까지(0부터 N까지) 순회하는 것입니다. 순회 중에 k보다 큰 첫 번째 요소를 만나면 해당 위치를 기준으로 남은 요
이 문제에서는 하나의 수 K가 주어지며, 우리의 목표는 합이 K와 같아지는 최소한의 피보나치 항의 개수를 구하는 것입니다.피보나치 수열은 앞의 두 수를 더하여 다음 수를 만들어 가는 수열입니다. 피보나치 수열은 두 개의 초기값 F0과 F1에서 시작하며, 초기값은 각각 0과 1 또는 1과 1로 정할 수 있습니다.피보나치 수열은 다음과 같습니다.0 1 1 2 3 5 8 13 ...문제 이해를 위한 예시입력K = 5출력2설명: 합 5는 피보나치 수인 3과 2를 더하여 만들 수 있으며, 이때 사용되는 항의 개수는 2개입니다.해결 접근 방법
문제 개요이 문제에서는 하나의 숫자 N이 주어지며, 우리의 과제는 주어진 숫자의 기울기(slope)를 찾는 것입니다.숫자의 기울기(slope)란 해당 숫자를 구성하는 자릿수 중 극댓값(maxima) 자릿수와 극솟값(minima) 자릿수의 총 개수를 의미합니다.극댓값 자릿수(maxima digit)는 바로 앞과 뒤에 있는 이웃 자릿수보다 모두 큰 자릿수를 말합니다.극솟값 자릿수(minima digit)는 바로 앞과 뒤에 있는 이웃 자릿수보다 모두 작은 자릿수를 말합니다.예시를 통해 문제를 이해해 보겠습니다.입력N = 9594459출력
문제 개요이 문제에서는 두 개의 배열 arr[]와 del[]이 주어집니다. 목표는 del[]에 포함된 요소들을 arr[]에서 삭제한 후, 남아 있는 값들 중 가장 작은 값을 찾는 것입니다.즉, 배열 arr[]의 값 중 del[]에 존재하는 값들을 제거한 뒤, 삭제가 완료된 상태에서의 최솟값을 출력하면 됩니다.문제를 이해하기 위해 예시를 살펴보겠습니다.입력 arr[] = {2, 5, 6, 9, 1} del[] = {1, 5, 9}출력 2위 예시에서 del[]에 포함된 1, 5, 9를 arr[]에서 삭제하면 {2, 6}만 남고, 이중
문제 개요h × w 크기의 격자(grid) 위에서 동작하는 청소 로봇을 만든다고 가정해 보겠습니다. 청소가 필요한 더러운 셀은 총 m개이며, 정수 쌍(pair)으로 이루어진 배열 dirt에 각 셀의 좌표가 담겨 있습니다.이 청소 로봇은 특정 셀에 배치되면 해당 행(row)과 열(column)에 속한 모든 셀을 한 번에 청소할 수 있습니다. 따라서 우리의 과제는 로봇을 어디에 배치해야 가장 많은 더러운 셀을 청소할 수 있는지 판단하고, 청소 가능한 최대 셀 개수를 구해 출력하는 것입니다.입력 예시와 기대 결과예를 들어 h = 3, w
문제 개요 h × w 크기의 격자가 주어지고, 각 칸에는 서로 다른 양의 정수가 하나씩 적혀 있다고 가정해 봅시다. 경로 탐색 로봇이 특정 칸 (p, q)에 놓여 있으며(p는 행 번호, q는 열 번호), 이 로봇을 칸 (i, j)로 이동시킬 수 있습니다. 한 번의 이동에 드는 비용은 |p − i| + |q − j|로 정의됩니다. 이제 다음과 같은 조건을 만족하는 q개의 여행(trip)이 주어집니다. 각 여행은 두 값 (x, y)를 가지며, 모든 여행에 공통으로 적용되는 값 d가 존재합니다. 로봇은 값이 x인 칸에서 출발하여 값이
문제 소개n × n 크기의 행렬이 하나 주어진다고 가정해 보겠습니다. 행렬의 모든 원소는 서로 중복되지 않으며, 1부터 n2 사이의 정수 값만을 가집니다. 우리는 다음 두 가지 연산을 원하는 만큼, 그리고 어떤 순서로든 반복해서 수행할 수 있습니다.행렬에 있는 두 정수 x와 y(단, 1 ≤ x < y ≤ n)를 골라, x가 들어 있는 열과 y가 들어 있는 열을 서로 맞바꿉니다.행렬에 있는 두 정수 x와 y(단, 1 ≤ x < y ≤ n)를 골라, x가 들어 있는 행과 y가 들어 있는 행을 서로 맞바꿉
h × w 크기의 격자(grid)가 있다고 가정해 봅시다. 이 격자는 initGrid라는 2차원 배열로 표현되며, 각 셀은 # 또는 . 문자로 이루어져 있습니다. #은 해당 칸에 장애물이 있음을 의미하고, .은 지나갈 수 있는 통로를 의미합니다. 로봇은 행 번호 x, 열 번호 y에 해당하는 셀 c 위에 놓여 있으며, 행 번호 p, 열 번호 q에 해당하는 다른 셀 d로 이동해야 합니다. 두 좌표 c와 d는 정수 쌍(pair) 형태로 주어집니다. 로봇의 이동 규칙 걷기: 현재 셀에서 상하좌우로 인접한 셀이라면 자유롭게 걸어서 이동할
문제 개요 n개의 3차원 좌표가 주어져 있다고 가정해 보겠습니다. 좌표 (a, b, c)에서 (x, y, z)로 이동할 때 드는 비용은 다음과 같이 정의됩니다. |x − a| + |y − b| + max(0, z − c) 우리는 첫 번째 좌표에서 출발하여 나머지 모든 좌표를 최소 한 번씩 방문한 뒤, 다시 첫 번째 좌표로 돌아오는 경로 전체의 총 비용을 계산해야 합니다. 각 좌표는 배열 coords에 담겨 주어집니다. 예를 들어 입력이 n = 3, coords = {{1, 1, 0}, {1, 3, 4}, {3, 2, 2}}라면 출력
문제 소개 최소 연결 그래프(minimally connected graph)란 간선을 하나라도 제거하면 그래프가 연결 상태를 잃게 되는 그래프를 의미합니다. 즉, 모든 정점이 서로 연결되어 있으면서 간선이 꼭 필요한 만큼만 존재하는 트리(tree) 형태입니다. 이러한 그래프가 n개의 정점을 가지고 있으며, 간선 정보는 배열 edges에 담겨 주어집니다. 아울러 n개의 정수를 포함하는 배열 vertexValues도 함께 제공됩니다. 규칙 다음 규칙에 따라 점수를 계산합니다. 각 정점에 양의 정수를 하나씩 적습니다. 간선으로 연결된