이 문제에서는 하나의 이진 트리가 주어지며, 각 레벨(층)에 속한 노드들을 값을 기준으로 정렬된 순서로 모두 출력해야 합니다.예시를 통해 개념을 더 쉽게 이해해 보겠습니다.입력 예시루트 노드의 값이 12이고, 왼쪽 자식은 98, 오른쪽 자식은 34인 이진 트리가 주어졌다고 가정합니다. 그 아래 레벨에는 76, 5, 12, 45가 위치합니다.출력 결과12 34 98 5 12 45 76위 출력에서 볼 수 있듯이 각 레벨의 노드 값들은 왼쪽에서 오른쪽 순서가 아니라, 오름차순으로 정렬되어 출력됩니다.접근 방법이 문제를 해결하려면 트리의
각 행이 오름차순으로 정렬되어 있는 행렬이 있다고 가정해 보겠습니다. 이때 모든 행에 공통으로 존재하는 요소를 찾는 함수를 작성해야 합니다. 예를 들어 다음과 같은 행렬이 있다고 합시다.이 경우 결과는 5가 됩니다.해결 접근 방식이 문제는 해시(Hash) 기반 방식을 사용하면 효율적으로 해결할 수 있습니다. 특히 이 방법은 행이 정렬되어 있지 않은 경우에도 동일하게 적용할 수 있다는 장점이 있습니다. 알고리즘의 동작 순서는 다음과 같습니다.행렬에 등장하는 고유한 값들을 키(key)로 하는 해시 테이블을 생성하고, 모든 값을 0으로
이 문제에서는 하나의 이진 트리(Binary Tree)가 주어지며, 이를 2차원 평면 위에 출력해야 합니다.이진 트리는 모든 노드가 최대 두 개의 자식 노드만 가질 수 있는 특수한 트리 구조입니다. 즉, 각 노드는 리프(leaf) 노드이거나 한 개 또는 두 개의 자식 노드를 갖습니다.예시아래 그림과 같은 이진 트리가 주어졌다고 가정해 보겠습니다.주어진 트리를 90도 회전하여 가로 방향으로 출력하면 다음과 같은 결과를 얻습니다.출력 결과 - 7 45 &n
이 문제의 목표는 문자열 배열을 정렬된 순서로 출력하되, 정렬 과정에서 한 문자열을 다른 문자열에 복사하는 작업을 수행하지 않는 것입니다. 즉, 프로그래머는 정렬 중에 실제 문자열 데이터를 이동시키거나 복사할 수 없습니다.문제 이해하기예시를 통해 개념을 더 쉽게 이해해 보겠습니다.입력 : {Delhi, Hyderabad, Indore, Mumbai, Banglore}출력 : Banglore, Delhi, Hyderabad, Indore, Mumbai설명 − 위 결과는 사전순(lexicographical order)으로 정렬된 것입니
문자열 A가 주어졌을 때, 회문(palindrome)에 해당하는 또 다른 문자열 B를 찾아야 하며, 이때 주어진 문자열 A는 반드시 B의 부분 수열(subsequence)이어야 합니다.여기서 부분 수열이란, 원본 문자열에서 일부 문자를 삭제하더라도 남은 문자들의 순서는 그대로 유지한 상태로 만들 수 있는 문자열을 의미합니다. 예를 들어 문자열이 cotst라면, 여기서 파생될 수 있는 문자열 중 하나가 contest입니다. 이 프로그램에서는 입력으로 A = ab를 사용하며, 그 결과 생성되는 문자열은 abba로 회문이 됩니다.해결 접
문제 개요이 문제에서는 정수 배열이 주어지며, 그중 배열의 다른 요소 중 적어도 하나로 나누어 떨어지는 숫자만 출력해야 합니다.개념을 더 잘 이해하기 위해 예시를 살펴보겠습니다.입력 : 3 12 16 21출력 : 12 21설명 − 3은 배열에서 가장 작은 수이므로 다른 어떤 수로도 나누어 떨어질 수 없습니다. 12는 3으로 나누어 떨어지고, 16은 3으로 나누어 떨어지지 않으며, 21은 3으로 나누어 떨어집니다. 따라서 3과 16은 제외하고 12와 21만 출력합니다.접근 방법가장 단순한 방법은 각 요소에 대해 배열의 다른 모든 요소
문제 개요정수로 이루어진 n × n 크기의 행렬 mat이 주어졌을 때, 모든 가능한 인덱스 조합에 대해 mat(c, d) − mat(a, b) 값의 최댓값을 구하는 문제입니다. 단, 인덱스 선택 시 반드시 c > a 그리고 d > b라는 조건을 만족해야 합니다.예를 들어 다음과 같은 5 × 5 행렬이 있다고 가정해 보겠습니다.12-1-4-20-8-342138613-4-117-60-410-51이 경우 출력 결과는 18입니다. 그 이유는 mat[4][2] − mat[1][0] = 10 − (-8) = 18로, 이 조합이 가능
문제 소개 이번 문제에서는 숫자로 이루어진 배열이 하나 주어지고, 배열의 요소를 오름차순과 내림차순이 번갈아 등장하도록 순서대로 출력해야 합니다. 구체적인 규칙은 다음과 같습니다. 처음 두 개 요소는 오름차순으로 출력하고, 그다음 세 개 요소는 내림차순으로, 이후 네 개 요소는 다시 오름차순으로 출력합니다. 예시를 통해 문제를 더 쉽게 이해해 보겠습니다. 입력 : {1, 4, 0, 2, 7, 9, 3} 출력 : 0 1 9 7 4 2 3 설명 − 배열을 오름차순으로 정렬하면 0 1 2 3 4 7 9가 됩니다. 처음 두 요소는 0 1
n개의 숫자로 이루어진 배열이 주어졌을 때, 두 요소의 합이 나머지 한 요소와 같아지는 세 개의 숫자(삼중항)를 찾는 문제입니다.예를 들어 배열이 [5, 32, 1, 7, 10, 50, 19, 21, 2]라고 한다면, 21 = 2 + 19이므로 출력 결과는 21, 2, 19가 됩니다. 만약 조건을 만족하는 조합이 존재하지 않는다면 그 사실을 알리는 메시지를 출력해야 합니다.문제 해결 접근 방식이 문제는 정렬(Sorting)과 투 포인터(Two Pointers) 기법을 활용하면 효율적으로 해결할 수 있습니다. 단계별로 살펴보면 다음과
이 문제에서는 하나의 이진 트리와 목표 노드가 주어지며, 해당 노드의 조상(ancestor) 노드를 모두 찾아 출력해야 합니다.이진 트리란?이진 트리(Binary Tree)는 모든 노드가 최대 두 개의 자식 노드만 가질 수 있는 특수한 트리 구조입니다. 즉, 각 노드는 자식이 없는 리프 노드이거나, 왼쪽·오른쪽 중 하나 또는 두 개의 자식 노드를 가집니다.조상 노드란?이진 트리에서 어떤 노드의 조상(ancestor)이란 해당 노드보다 상위 레벨에 있으면서, 그 노드부터 루트 노드까지의 경로에 포함되는 노드들을 의미합니다.예를 들어,
별(*)과 알파벳으로 채워진 행렬 M이 있다고 가정해 봅시다. 이때 각 알파벳을 둘러싸고 있는 별의 개수를 세어, 가장 많은 별을 가진 알파벳을 찾아야 합니다.예를 들어 다음과 같은 행렬이 있다고 하겠습니다.위 행렬에서 알파벳 A와 C는 각각 주변에 7개의 별을 가지고 있으며, 이것이 최대값입니다. 두 글자가 동일한 개수일 경우에는 사전순(lexicographic order)으로 더 앞선 문자가 출력되어야 하므로, 이 예제의 정답은 A가 됩니다.해결 접근 방식풀이 방법은 매우 간단합니다.1. 행렬을 순회하면서 알파벳 문자를 찾습니다
문제 소개이 문제에서는 하나의 이진 트리가 주어지며, 트리 내 특정 노드의 조상(ancestor) 노드들을 모두 출력해야 합니다.이진 트리(Binary Tree)는 각 노드가 최대 두 개의 자식 노드만 가질 수 있는 특수한 형태의 트리입니다. 즉, 모든 노드는 자식이 없는 리프 노드이거나, 한 개 또는 두 개의 자식 노드를 갖습니다.조상 노드란?이진 트리에서 어떤 노드의 조상이란, 해당 노드보다 상위 레벨에 위치하면서 루트 노드로부터 그 노드까지의 경로에 있는 노드를 의미합니다.예를 들어, 값이 17인 노드의 조상은 루트에서 해당
이진 행렬(binary matrix)이 주어졌을 때, 그 안에 숨어 있는 중복 행을 찾는 방법을 알아봅니다. 예를 들어 다음과 같은 6×6 크기의 이진 행렬이 있다고 가정해 보겠습니다. 110101001001101100110101001001001001 위 행렬에서는 3번, 4번, 5번 위치(인덱스는 0부터 시작)의 행이 각각 앞서 등장한 행과 완전히 동일합니다. 즉, 0번 행과 3번 행이 같고, 1번·4번·5번 행이 서로 중복됩니다. 트라이(Trie)를 활용한 해결 아이디어 이 문제는 트라이(Trie) 자료구조를 사용하면 매
문제 개요이 문제에서는 크기가 n×m인 2차원 행렬을 생성해야 합니다. 단, 행렬에는 오직 모음만 배치하며, 각 행과 각 열마다 모든 모음(a, e, i, o, u)이 반드시 포함되어야 합니다.모든 모음이란 a, e, i, o, u 다섯 글자가 행렬의 모든 행과 모든 열에 존재해야 한다는 의미입니다. 따라서 필요한 최소 행·열 개수는 5개이며, 만들 수 있는 가장 작은 행렬의 크기는 5×5입니다.예제를 통해 문제를 더 자세히 살펴보겠습니다.예제 1입력 : N = 5, M = 5출력 : a e i o u 
정수 N이 주어졌을 때, N의 모든 약수를 구한 후 다음 두 조건을 동시에 만족하는 네 개의 약수를 찾아 그 곱을 출력하는 것이 이 문제의 목표입니다.선택한 네 약수의 합이 정확히 N과 같아야 합니다.네 약수의 곱이 가능한 한 최대가 되어야 합니다.예를 들어 N이 24라고 가정해 보겠습니다. 24의 모든 약수는 1, 2, 3, 4, 6, 8, 12, 24입니다. 이 중 약수 6을 네 번 선택하면 6 + 6 + 6 + 6 = 24가 되어 합 조건을 만족하고, 이때 곱은 6 × 6 × 6 × 6 = 1296으로 최대값이 됩니다.접근 방
연결 리스트란?연결 리스트(Linked List)는 데이터를 비연속적인 메모리 공간에 저장하는 선형 자료 구조입니다. 각 노드는 실제 데이터와 함께 다음 노드의 주소를 가리키는 포인터를 포함하고 있으며, 포인터를 따라가며 순차적으로 접근할 수 있습니다.문제 정의이 문제에서는 하나의 연결 리스트가 주어지며, 리스트의 모든 요소가 아니라 대체(alternate)되는 요소, 즉 홀수 번째 위치의 노드 값만 출력해야 합니다.입력 : 2 -> 4 -> 1 -> 67 -> 48 -> 90 출력 : 2 -> 1
이 문제에서는 카멜케이스(camelCase)로 작성된 문자열 배열과 하나의 패턴이 주어지며, 주어진 패턴과 일치하는 문자열을 모두 찾아 출력해야 합니다. 핵심 개념 정리 문자열 배열(String Array)은 요소가 모두 문자열(string) 타입인 배열을 의미합니다. 카멜케이스(CamelCase)는 프로그래밍에서 가장 널리 사용되는 명명 규칙 중 하나로, 새로운 단어의 첫 글자는 대문자로 시작하고 나머지 글자는 모두 소문자로 표기하는 방식입니다. 예시: iLoveProgramming 문제 정의 목표는 주어진 패턴과 일치하는 모든
이 문제에서는 하나의 문자열이 주어지며, 이를 여러 개의 부분 문자열로 나눈 뒤 각 부분 문자열을 괄호로 묶어 출력해야 합니다.먼저 예제를 통해 문제를 더 자세히 살펴보겠습니다.입력 : wxyz 출력 : (w) (x) (y) (z) (w) (x) (yz) (w) (xy) (z) (w) (xyz) (wx) (y) (z) (wx) (yz) (wxy) (z) (wxyz)문제 접근 방법설명 − 주어진 문자열을 가능한 모든 조합으로 부분 문자열로 나누고, 각 부분 문자열을 괄호로 감싸
이진 행렬(binary matrix)이 주어졌을 때, 네 개의 모서리가 모두 1인 직사각형이 존재하는지 확인하는 문제입니다. 예를 들어 다음과 같은 행렬이 있다고 가정해 보겠습니다.10010001010001010101이 행렬의 경우 결과는 예입니다. 실제로 아래와 같이 네 모서리가 모두 1인 직사각형이 하나 존재합니다.101010101접근 방법모든 경우를 무작정 검사하는 브루트 포스 방식보다, 해시 기반 자료구조를 활용하면 훨씬 효율적으로 문제를 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.행렬을 위에서 아래로 한 행(ro
문제 개요이 문제에서는 하나의 단어 집합과 문자 배열이 주어지며, 배열에 포함된 글자들만 사용해 만들 수 있는 단어들을 찾아 출력해야 합니다.예시를 통해 문제를 더 자세히 살펴보겠습니다.입력 :words[] = {go, hi, run, on, hog, gone}char[] = {a, o, h, g}출력 : go, hog설명 − 주어진 단어 중 go와 hog는 문자 배열 {a, o, h, g}에 있는 글자들만으로 구성되어 있으므로 유효한 단어입니다. 반면 hi, run, on, gone은 배열에 없는 문자(i, r, u,