문제 개요이 문제에서는 정수 N이 주어지며, 우리의 목표는 1 - 2 + 3 - 4 + 5 - 6 + 7...과 같이 부호가 번갈아 나타나는 교대 급수의 첫 N항까지의 합을 구하는 것입니다.급수는 다음과 같이 진행됩니다.1 - 2 + 3 - 4 + 5 - 6 + 7 - 8 + 9 - 10 ...예제를 통해 문제를 살펴보겠습니다.입력 : N = 4 출력 : -2설명 −1 - 2 + 3 - 4 = -2풀이 접근 방법이 문제를 효율적으로 해결하는 핵심은 급수의 일반항을 분석하여 합의 공식을 도출하는 것입니다. 반복문 없이 공식
이 문제에서는 정수 N이 주어지며, 우리의 목표는 1 + 22 + 333 + 4444 + 55555… 형태로 이루어진 수열의 n항까지의 합을 구하는 것입니다.문제 이해하기예제를 통해 문제를 살펴보겠습니다.입력 : N = 4 출력 : 4800설명 −1 + 22 + 333 + 4444 = 4800이 수열의 규칙은 간단합니다. k번째 항은 숫자 k가 k번 반복된 값입니다. 즉, 3번째 항은 333, 4번째 항은 4444, 5번째 항은 55555가 됩니다.해결 접근 방식이 문제를 효율적으로 푸는 방법은 수열의 일반항을 구한 뒤, n항까지의
문제 소개이 문제에서는 문자 M(남성)과 F(여성)로만 구성된 문자열 하나와 시간 t가 주어지며, 우리의 과제는 주어진 시간이 지난 후 대기열의 배치를 구하는 것입니다.이 문자열은 버스에 타기 위해 한 줄로 서 있는 사람들의 대기열을 나타냅니다. 줄에 선 모든 남성들은 기사도 정신이 투철해서, 어느 시점이든 자신 바로 뒤에 여성이 서 있는 것을 발견하면 그 여성과 자리를 맞바꿉니다. 버스 탑승까지 남은 시간은 t 단위이며, 한 번의 자리 교환에는 1단위 시간이 걸립니다. 따라서 버스가 도착했을 때의 대기열 상태를 재배치를 통해 계산
이 문제에서는 하나의 숫자 n이 주어지며, 우리의 목표는 첫 N개의 자연수의 평균을 구하는 것입니다.평균(Average)이란 모든 수의 합을 수의 총 개수로 나눈 값으로 정의됩니다. 따라서 첫 N개의 자연수의 평균은 첫 N개 자연수의 합 ÷ N이 됩니다.문제 이해를 위한 예시입력 : N = 23출력 : 12풀이 설명 −1 + 2 + 3 + ... + 22 + 23 = 276276 / 23 = 12해결 접근 방법평균을 구하기 위해 기본적인 평균 공식을 활용합니다.Average = sum(N) / NAverage = (1 + 2 + 3
이 문제에서는 하나의 이진 트리(Binary Tree)가 주어지며, 우리의 과제는 트리에서 가장 깊은 노드(Deepest Node)를 찾는 것입니다.이진 트리는 데이터를 저장하기 위해 사용되는 특수한 자료구조입니다. 각 노드가 최대 두 개의 자식 노드만 가질 수 있다는 조건을 가지고 있습니다.여기서 이진 트리의 가장 깊은 노드란 트리 내에서 최대 높이에 위치한 노드를 의미합니다.문제 예시예제를 통해 문제를 이해해 보겠습니다.입력:출력: 8해결 접근 방법이 문제를 해결하는 방법은 여러 가지가 있습니다. 기본 원리는 트리의 높이를 구하
이 문제에서는 직각삼각형의 빗변(H)과 넓이(A) 두 값이 주어지며, 이를 바탕으로 직각삼각형의 나머지 두 변의 길이를 구하는 것이 목표입니다.직각삼각형(Right Angled Triangle)은 두 변이 서로 직각(90도)으로 만나는 특수한 형태의 삼각형입니다.예시를 통해 문제를 살펴보겠습니다.입력 : H = 7 , A = 8출력 : 높이(height) = 2.43, 밑변(base) = 6.56해결 접근 방법이 문제는 수학적 공식을 활용하면 간단하게 해결할 수 있습니다. 공식을 하나씩 유도해 보겠습니다.직각삼각형의 넓이와 피타고라
이 문제에서는 공백으로 구분된 여러 단어로 이루어진 문자열 str이 주어집니다. 우리의 목표는 문자열에서 길이가 가장 긴 짝수 단어를 찾는 것입니다.즉, 공백 사이에 있는 단어 중 길이가 최대이면서 그 길이가 짝수인 단어를 찾아야 합니다.문제 예시예제를 통해 문제를 더 자세히 이해해 보겠습니다.입력 : str = learn programming at TutorialsPoint 출력 : TutorialsPoint설명 −짝수 길이를 가진 단어는 TutorialsPoint입니다.해결 방법이 문제를 해결하는 간단한 방법은, 지금까지 찾은
문제 개요 이 문제에서는 공백으로 구분된 여러 단어로 이루어진 문자열 str이 주어지며, 우리의 목표는 문자열에서 가장 먼저 반복되는 단어를 찾는 것입니다. 여기서 말하는 단어란 두 공백 사이에 있는 문자열을 의미하며, 문자열 안에서 두 번 이상 등장하는 첫 번째 단어를 찾아야 합니다. 예제로 이해하기 입력 : str = C program are easy to program 출력 : program 위 예제에서는 program이라는 단어가 두 번 등장하므로, 결과값은 program이 됩니다. 해결 접근 방법 이 문제의 가장 간단한
문제 개요이 문제에서는 n개의 정수로 이루어진 배열 arr가 주어집니다. 우리의 과제는 배열에서 첫 번째 반복 요소(first repeating element)를 찾는 것입니다.여기서 첫 번째 반복 요소란 배열 안에서 두 번 이상 등장하는 값들 중, 그 첫 등장 위치(인덱스)가 가장 앞선 값을 의미합니다.예제로 이해하기입력 : arr[] = {4, 1, 8, 9, 7, 2, 1, 6, 4}출력 : 4설명 −두 번 이상 등장하는 정수는 4와 1입니다.4의 첫 등장 위치가 1보다 앞서므로 정답은 4입니다.해결 방법 1: 중첩
문제 설명정수 N이 주어졌을 때, 처음 N개의 자연수(1부터 N까지)로 만들 수 있는 좋은 순열(good permutation)을 찾는 것이 이 문제의 목표입니다.순열(permutation)이란 어떤 집합의 전체 또는 일부 원소를 특정 순서에 따라 나열한 것을 의미합니다.좋은 순열은 다음 조건을 모두 만족하는 순열입니다.모든 원소에 대해 1 ≤ i ≤ N일 때 P(P(i)) = i 를 만족할 것동시에 P(i) ≠ i, 즉 어떤 원소도 자기 자신의 위치에 있지 않을 것쉽게 말해, 임의의 원소를 두 번 치환하면 반드시 원래 값으로 돌아
이 문제에서는 직각삼각형의 높이(H)와 밑변(B)을 나타내는 두 개의 정수 값이 주어지며, 주어진 두 변을 이용해 직각삼각형의 빗변(hypotenuse)을 구하는 것이 목표입니다.직각삼각형이란?직각삼각형은 세 내각 중 하나가 정확히 90도(직각)인 특수한 삼각형입니다. 직각과 마주 보는 가장 긴 변을 빗변이라고 하며, 나머지 두 변은 각각 밑변(base)과 높이(height)라고 부릅니다.예시를 통해 문제를 살펴보겠습니다.입력 : B = 5, H = 12출력 : 13.00해결 접근 방법이 문제는 피타고라스 정리(Pythagoras
이 문제에서는 0과 1(불리언 값)로만 구성된 정렬된 배열 bin[]이 주어집니다. 우리의 목표는 이 배열에서 처음으로 1이 나타나는 인덱스를 찾는 것입니다.문제 이해하기예시를 통해 문제를 살펴보겠습니다.입력 : bin[] = {0, 0, 0, 1, 1}출력 : 3설명 −배열에서 처음으로 1이 등장하는 위치는 인덱스 3입니다.해결 접근 방법이 문제를 해결하려면 배열에서 첫 번째 1의 인덱스를 찾아야 하며, 이를 위해 다양한 탐색 기법을 활용할 수 있습니다.방법 1: 선형 탐색 (Linear Search)가장 직관적인 방법은 선형 탐
문제 개요이 문제에서는 0과 1(boolean 값)만으로 구성되어 있고 오름차순으로 정렬된 무한 배열 bin[]이 주어집니다. 우리가 해야 할 일은 이 무한 배열에서 처음 등장하는 1의 인덱스를 찾는 것입니다.배열은 무한하다고 가정하지만, 반드시 배열 안에 1이 존재한다는 것이 보장됩니다.문제 이해를 위한 예시입력 : bin[] = {0, 0, 0, 1, 1, ....}출력 : 3설명 −배열에서 처음 1이 나타나는 위치는 인덱스 3입니다.해결 접근 방법핵심은 배열에서 가장 먼저 나오는 1의 위치를 찾는 것이므로, 다양한 탐색 기법을
이 문제에서는 크기가 N인 배열 arr[]가 주어지며, 우리의 목표는 배열에서 가능한 모든 이동을 수행한 후 왼쪽 포인터의 최종 인덱스를 찾는 것입니다. 배열을 탐색하기 위해 두 개의 포인터를 사용합니다. 하나는 왼쪽 포인터(left pointer), 다른 하나는 오른쪽 포인터(right pointer)입니다. 왼쪽 포인터: 인덱스 0에서 시작하며, 조건에 따라 값을 증가시켜 앞으로 이동합니다. 오른쪽 포인터: 인덱스 (n-1)에서 시작하며, 조건에 따라 값을 감소시켜 뒤로 이동합니다. 포인터 이동 규칙은 각 포인터가 지나온
문제 설명이 문제에서는 크기가 N인 배열 res[]가 주어지며, 우리의 목표는 범위 합(range sum) 쿼리가 적용된 결과 배열로부터 원래의 초기 배열을 찾는 것입니다.다시 말해, 어떤 시작 배열에 [s, e, val] 형태의 쿼리들을 순서대로 수행했을 때 최종적으로 배열 rel[]이 만들어진다면, 우리는 그 시작 배열, 즉 초기 배열을 구해야 합니다.각 [s, e, val] 쿼리의 의미는 다음과 같습니다.s → 업데이트를 시작할 인덱스e → 업데이트를 끝낼 인덱스val → 배열의 s부터 e까지 모든 요소에 더해질 값예제로 이해
이 문제에서는 크기가 n인 배열 arr[], 크기가 m인 배열 del[], 그리고 정수 k가 주어집니다. 우리의 과제는 주어진 요소들을 삭제한 후 가장 큰 k개의 숫자를 찾는 것입니다.즉, del[] 배열에 포함된 모든 요소를 arr[]에서 제거한 뒤, 남은 요소 중 가장 큰 k개의 요소를 출력해야 합니다. 만약 동일한 값이 여러 개 존재한다면 첫 번째 인스턴스만 삭제합니다.예시를 통해 문제를 이해해 보겠습니다.입력 : arr[] = {3, 5, 1, 7, 9, 2}, del[] = {1, 9, 3}, k = 2출력 : 7, 5설명
이 문제에서는 크기 n의 배열 arr[], 크기 m의 배열 del[], 그리고 정수 k가 주어집니다. 우리의 과제는 주어진 요소들을 삭제한 후 가장 작은 k개의 숫자를 찾는 것입니다.즉, arr[] 배열에서 del[] 배열에 포함된 모든 요소를 삭제한 뒤, 남은 요소들 중 가장 작은 k개의 값을 출력해야 합니다. 만약 동일한 값이 배열에 여러 개 존재한다면, 먼저 등장하는 인스턴스를 삭제합니다.문제 이해를 위한 예시입력 : arr[] = {3, 5, 1, 7, 9, 2}, del[] = {1, 9, 3}, k = 2 출력 : 2,
문제 개요 이 문제에서는 두 정수 N과 k가 주어지며, 우리의 목표는 자연수 N의 k번째로 작은 약수를 찾는 것입니다. 예시를 통해 문제를 이해해 보겠습니다. 입력 : N = 15, k = 3 출력 : 5 설명 − 15의 약수는 1, 3, 5, 15 세 번째로 작은 약수는 5 해결 방법 1: 약수를 모두 구한 뒤 정렬하기 가장 단순한 접근 방식은 N의 모든 약수를 구해 배열에 저장한 후, 정렬하여 k번째 값을 출력하는 것입니다. 약수를 효율적으로 찾기 위해 1부터 √N까지 반복하면서 N이 i로 나누어떨어지는지 확인합니다. 나누어떨
문제 소개이 문제에서는 L~R 구간에 속한 정수들로 이루어진 N개의 범위가 range[N][2] 형태의 배열로 주어지고, 정수 k가 함께 제공됩니다. 우리의 목표는 이 N개의 범위로 생성된 수열에서 k번째 원소를 찾는 것입니다.예제로 문제 이해하기입력 : ranges[][] = {{1, 3}, {5, 7}}, k = 4출력 : 5풀이 설명 −생성되는 수열은 {1, 2, 3, 5, 6, 7}여기서 네 번째 원소는 5입니다.방법 1: 단순 접근 – 전체 수열을 배열에 저장가장 간단한 방법은 주어진 각 범위에 포함된 정수들을 하나의 배열
문제 개요 크기가 N인 트리와 트리의 한 노드 V, 그리고 정수 k가 주어졌을 때, 노드 V를 루트로 하는 서브트리의 DFS(깊이 우선 탐색) 순회에서 k번째 노드를 찾는 것이 이 글의 목표입니다.다시 말해, 정점 V에서 시작하는 DFS 순회 과정에서 k번째로 방문되는 노드를 구해야 합니다. 예시로 이해하기 입력: 5 / | \ \ 8 2 10 3 / \ | 6 1 9 |