문제 소개 두 배열 words1과 words2가 주어지며, 각각 하나의 문장으로 간주합니다. 여기에 유사한 단어 쌍 목록 pairs가 함께 제공되었을 때, 두 문장이 서로 유사한지 판별하는 것이 이 문제의 핵심입니다. 예를 들어 words1 = ["great", "acting", "skills"], words2 = ["fine", "drama", "talent"]이고, 유사 단어 쌍이 [["great", &
문제 소개 정수들이 담긴 큐(queue)가 주어졌을 때, 큐 안에서 가장 앞에 있는 고유한(한 번만 등장하는) 정수를 찾아내는 문제입니다. 이를 위해 FirstUnique 클래스를 구현해야 하며, 클래스는 다음과 같이 동작합니다. 생성자: 큐를 초기화할 숫자 배열을 전달받습니다. showFirstUnique(): 큐에서 첫 번째 고유한 정수를 반환하며, 존재하지 않으면 -1을 반환합니다. add(value): 큐에 새로운 값을 추가합니다. 동작 예시 예를 들어 큐를 [2, 3, 5]로 초기화한 뒤 아래와 같이 함수를 호출한다고
문제 개요 루트(root)에서 임의의 리프(leaf) 노드까지 이어지는 모든 경로가 하나의 유효한 시퀀스를 형성하는 이진 트리가 있습니다. 이때 정수 배열 arr의 값을 순서대로 이어 붙여 만든 수열이 이 트리에 실제로 존재하는 루트-리프 경로와 정확히 일치하는지 확인해야 합니다. 유효한 시퀀스의 조건을 정리하면 다음과 같습니다. 배열의 첫 번째 값은 루트 노드의 값과 일치해야 합니다. 배열의 각 값은 경로상의 노드 값과 순서대로 일치해야 합니다. 배열의 마지막 값은 반드시 리프 노드(자식이 없는 노드)의 값과 일치해야 하며,
문제 소개숫자로만 이루어진 문자열이 하나 주어졌다고 가정해 봅시다. 우리는 이 문자열을 복원하여 가능한 모든 유효한 IP 주소 조합을 반환해야 합니다. 유효한 IP 주소는 정확히 네 개의 정수(각 정수는 0부터 255 사이의 값)가 마침표(.) 하나로 구분된 형태로 구성됩니다.예를 들어 입력이 25525511135라면, 출력은 다음과 같습니다.[255.255.11.135, 255.255.111.35]해결 접근 방법이 문제는 재귀 호출과 백트래킹(backtracking)을 활용하여 해결할 수 있습니다. 전체 알고리즘은 다음 단계로 진
이진 트리가 하나 주어지고, 값 v와 깊이 d도 함께 주어진다고 가정해 봅시다. 이때 우리는 주어진 깊이 d 위치에 값이 v인 노드들로 이루어진 새로운 행(row)을 추가해야 합니다. 루트 노드는 깊이 1에 해당합니다.이 작업을 수행하려면 다음 규칙을 따라야 합니다.깊이 d-1에 있는 모든 유효한 트리 노드 N에 대해, 값이 v인 두 개의 새로운 노드를 생성하여 각각 N의 왼쪽 서브트리 루트와 오른쪽 서브트리 루트로 만듭니다.N의 원래 왼쪽 서브트리는 새로 생성된 왼쪽 노드의 왼쪽 자식으로 연결되고, 원래 오른쪽 서브트리는 새로 생
문제 설명루트가 없는 트리(unrooted tree), 즉 사이클이 존재하지 않는 무방향 그래프가 하나 있다고 가정해 보겠습니다. 입력으로 주어지는 그래프는 노드 값이 1부터 N까지 서로 겹치지 않는 N개의 노드로 이루어진 트리에 간선을 하나 더 추가한 형태입니다. 새로 추가된 간선은 1부터 N 사이에서 서로 다른 두 정점으로 구성되며, 기존에 존재하지 않던 간선이라는 점이 보장됩니다.최종 그래프는 2차원 배열 edges로 표현됩니다. 각 원소는 [u, v] 형태의 쌍(u < v)이며, 노드 u와 v를 잇는 무방향 간선을 의미
n개의 도시가 m개의 항공편으로 연결되어 있다고 가정해 봅시다. 각 항공편은 출발지 u에서 도착지 v까지 가격 w로 운항됩니다. 모든 도시와 항공편 정보, 그리고 출발 도시 src와 목적지 dst가 주어졌을 때, 우리의 과제는 최대 k번의 경유(스톱)를 허용하면서 src에서 dst까지 도달하는 최저 가격을 찾는 것입니다. 만약 그러한 경로가 존재하지 않는다면 -1을 반환해야 합니다.예를 들어 입력이 n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]], src = 0, dst = 2, k = 1이라면
이진 트리와 특정 목표 노드(target), 그리고 값 K가 주어졌을 때, 목표 노드로부터 거리 K만큼 떨어져 있는 모든 노드의 값을 찾는 문제입니다.예를 들어, 입력이 다음과 같다고 가정해 보겠습니다.root = [3,5,1,6,2,0,8,null,null,7,4]target = 5K = 2이 경우 출력은 [7, 4, 1]이 됩니다. 목표 노드 5에서 거리 2만큼 떨어져 있는 노드들의 값이 각각 7, 4, 1이기 때문입니다.문제 해결 접근 방식이 문제의 핵심은 트리를 그래프처럼 다루는 것입니다. 일반적인 트리 순회는 부모에서 자식
문제 소개 음이 아닌 정수(non-negative integer)로 구성된 점수 배열이 하나 주어집니다. 첫 번째 플레이어가 배열의 양쪽 끝에 있는 숫자 중 하나를 선택하면, 이어서 두 번째 플레이어가 남은 숫자의 양쪽 끝에서 하나를 선택하고, 두 플레이어가 번갈아 가며 이 과정을 반복합니다. 한 번 선택된 숫자는 상대방이 다시 사용할 수 없으며, 모든 점수가 선택될 때까지 게임이 진행됩니다. 최종적으로 더 높은 점수를 얻은 플레이어가 승리합니다. 우리가 해야 할 일은 주어진 점수 배열에서 첫 번째 플레이어가 반드시 이길 수 있는지
문제 소개문자열 리스트가 주어졌을 때, 그중에서 가장 긴 비공통 부분 수열(Longest Uncommon Subsequence)을 찾는 문제입니다. 여기서 비공통 부분 수열이란, 리스트에 있는 특정 문자열의 부분 수열이면서 동시에 다른 어떤 문자열의 부분 수열에도 해당하지 않는 것 중 가장 긴 것을 의미합니다.부분 수열(subsequence)은 원래 시퀀스에서 나머지 요소들의 상대적인 순서를 변경하지 않고 일부 문자를 삭제함으로써 얻을 수 있는 시퀀스입니다.이 문제에서는 문자열 리스트를 입력으로 받으며, 출력은 가장 긴 비공통 부분
문제 설명0과 1로만 이루어진 행렬이 주어졌을 때, 각 셀에서 가장 가까운 0까지의 거리를 구하는 것이 목표입니다. 이때 인접한 두 셀 사이의 거리는 1로 정의됩니다.예를 들어 입력이 다음과 같다면,000010111출력은 다음과 같습니다.000010121행렬 중앙의 1은 바로 옆에 0이 인접해 있으므로 거리가 1이 되고, 마지막 행의 가운데 1은 인접한 네 방향 어디에도 0이 없으므로 두 칸 떨어진 0까지의 거리인 2가 됩니다.접근 방법: 너비 우선 탐색(BFS)이 문제는 너비 우선 탐색(BFS)을 활용하면 효율적으로 해결할 수 있
문제 개요일렬로 서 있는 n명의 병사가 있다고 가정해 봅시다. 각 병사에게는 서로 다른 고유한 평점(rating) 값이 부여되어 있습니다. 우리는 다음 규칙에 따라 이들 중 3명으로 구성된 팀을 만들어야 합니다.인덱스 (i, j, k)를 가진 3명의 병사를 선택하며, 이때 i < j < k를 만족해야 합니다. 팀이 유효하기 위한 조건은 다음 두 가지 중 하나입니다.rating[i] < rating[j] < rating[k] — 평점이 오름차순rating[i] > rating[j] > rating[k]
문제 개요문자열 s와 정수 k가 주어졌을 때, s에 있는 모든 문자를 사용하여 k개의 비어 있지 않은 팰린드롬(회문) 문자열을 구성할 수 있는지 확인하는 문제입니다. 즉, 남는 문자 없이 s 전체를 k개의 회문으로 나눌 수 있는지 판단해야 합니다.예를 들어 입력이 true이고 k = 4인 경우, 네 글자를 각각 별도의 한 글자짜리 회문 문자열로 배치하는 것이 유일한 해이므로 결과는 True가 됩니다.접근 방법팰린드롬의 핵심 성질을 이용하면 문제를 간단히 해결할 수 있습니다. 팰린드롬에서는 최대 한 개의 문자만 홀수 번 등장할 수 있
문제 개요하나의 원이 (반지름 r, xc, yc) 형태로 표현된다고 가정해 보겠습니다. 여기서 (xc, yc)는 원의 중심 좌표입니다. 또한 축에 평행한 사각형(axis-aligned rectangle)은 (x1, y1, x2, y2) 형태로 주어지며, (x1, y1)은 사각형의 왼쪽 아래 꼭짓점 좌표, (x2, y2)는 오른쪽 위 꼭짓점 좌표를 나타냅니다. 이 글에서는 원과 사각형이 서로 겹치는지(overlap) 판별하는 방법을 알아보겠습니다.예를 들어 다음과 같은 상황이 주어졌다면,원과 사각형이 겹치므로 출력 결과는 true가
이진 형태의 숫자 s가 주어졌을 때, 아래 규칙에 따라 이 숫자를 1로 줄이는 데 필요한 총 단계 수를 구하는 것이 목표입니다.현재 숫자가 짝수라면 2로 나눕니다.현재 숫자가 홀수라면 1을 더합니다.문제 이해하기예를 들어 입력이 1101이라면 출력은 6이 됩니다. 1101은 십진수로 13에 해당합니다. 과정을 하나씩 살펴보면 다음과 같습니다.13은 홀수 → 1을 더해 14를 얻습니다.14는 짝수 → 2로 나누어 7을 얻습니다.7은 홀수 → 1을 더해 8을 얻습니다.8은 짝수 → 2로 나누어 4를 얻습니다.4는 짝수 → 2로 나누어
문제 개요문자열에 aaa, bbb, ccc와 같은 부분 문자열이 하나도 포함되어 있지 않다면, 그 문자열을 해피(happy) 문자열이라고 부릅니다. 세 정수 a, b, c가 주어졌을 때, 다음 조건을 모두 만족하는 문자열 s를 반환하는 것이 이번 문제의 목표입니다.s는 해피 문자열이면서 가능한 한 가장 길어야 합니다.s에는 문자 a가 최대 a번, b가 최대 b번, c가 최대 c번까지만 등장할 수 있습니다.s는 오직 a, b, c 세 글자로만 구성되어야 합니다.조건을 만족하는 문자열을 만들 수 없다면 빈 문자열을 반환하면 됩니다. 예
1부터 m 사이의 양의 정수로 이루어진 배열 queries가 주어졌을 때, 다음 규칙에 따라 모든 쿼리 queries[i](i = 0부터 n-1까지, n은 queries의 크기)를 처리해야 합니다. 문제 개요 처음에는 순열 P = [1, 2, 3, ..., m]으로 시작합니다. 현재 인덱스 i에 대해, 순열 P에서 queries[i]의 위치(0부터 시작하는 인덱스)를 찾은 뒤, 해당 값을 P의 맨 앞으로 이동시킵니다. 모든 쿼리를 처리한 후에는, 각 쿼리에서 찾은 위치 값을 담은 배열을 결과로 반환해야 합니다. 예제 살펴보기
문제 개요하나의 수 k가 주어졌을 때, 그 합이 정확히 k가 되도록 하는 피보나치 수의 최소 개수를 구하는 문제입니다. 이때 같은 피보나치 수는 여러 번 재사용할 수 있다는 조건이 붙습니다.예를 들어 k = 7이라고 가정해 보겠습니다. 피보나치 수열은 1, 1, 2, 3, 5, 8, 13, ... 과 같이 진행되므로, 7은 2 + 5로 표현할 수 있습니다. 따라서 필요한 피보나치 수의 최소 개수는 2개가 됩니다.접근 방법: 탐욕(Greedy) 알고리즘이 문제는 탐욕적(Greedy) 접근법으로 효율적으로 해결할 수 있습니다. 핵심 아
해피 문자열(Happy String)이란?해피 문자열은 다음 두 가지 조건을 동시에 만족하는 문자열입니다.문자열이 오직 a, b, c 세 문자로만 구성됩니다.모든 인덱스 i(1 ≤ i ≤ 문자열 길이 − 1)에 대해 s[i] ≠ s[i + 1]을 만족합니다. 즉, 인접한 두 문자가 서로 같지 않아야 합니다.예를 들어 abc, cac, aba는 해피 문자열이지만, aab처럼 인접한 문자가 반복되거나 d 같은 다른 문자가 포함된 문자열은 해피 문자열이 아닙니다.문제 설명두 정수 n과 k가 주어졌을 때, 길이가 n인 모든 해피 문자열을
레스토랑에서 손님들이 한 주문 내역을 담고 있는 배열 orders가 있다고 가정해 보겠습니다. 각 원소는 orders[i] = [cust_name_i, table_num_i, food_item_i] 형태로, 순서대로 고객 이름, 테이블 번호, 주문한 음식 메뉴를 의미합니다.우리의 목표는 이 레스토랑의 “표시 테이블(display table)”을 만들어 반환하는 것입니다. 여기서 표시 테이블이란 각 테이블이 어떤 음식을 몇 개씩 주문했는지 보여주는 표입니다. 첫 번째 열에는 테이블 번호가 들어가고, 나머지 열들은