주어진 N×M 보드에서, 8×8 체스판을 잘라낸 후 규칙에 맞게 다시 칠해야 하는 칸의 최소 개수를 구하는 문제입니다.
현재 좌표 (x, y)에 있는 점이 직사각형 안에서 경계선까지 최소 몇 단위로 움직이면 탈출할 수 있는지를 구하는 문제입니다.
입력된 단어에서 가장 많이 사용된 알파벳을 구하는 문제입니다. 단, 대소문자를 구분하지 않고,가장 많이 쓰인 알파벳이 여러 개일 경우 ?를 출력합니다.
N개의 단어가 주어졌을 때, 중복을 제거하고 정해진 우선순위에 따라 정렬하는 문제입니다. 중복 제거를 위한 HashSet의 활용과, 다중 조건 정렬을 위한 Comparator 구현이 문제 해결의 핵심입니다.
X번째 분수가 무엇인지 구하는 문제입니다. 분수들은 일정한 규칙으로 대각선을 따라 나열되어 있으며, 그 규칙을 분석하고 구현하는 것이 핵심입니다.
두 집합 A와 B가 주어질 때, 두 집합의 대칭 차집합에 속하는 원소의 개수를 구하는 문제입니다. 집합의 개념과 원소의 포함 여부를 빠르게 확인할 수 있는 HashSet 자료구조를 효율적으로 사용하는 것이 문제 해결의 핵심입니다.
주어진 단어가 "그룹 단어"인지 판별하는 문제입니다. 그룹 단어란, 같은 문자가 연속해서 등장하거나, 처음 등장한 이후 다시 나오지 않는 단어를 의미합니다.
“666”이 들어가는 영화 제목을 N번째로 만들기 위해 숫자를 순회하며 문자열 검색하는 문제입니다. 단순하지만 브루트포스/완전탐색의 기본 패턴을 익히기에 적합합니다.
N개의 포켓몬 도감이 주어졌을 때, '번호'를 입력하면 '이름'을, '이름'을 입력하면 '번호'를 맞추는 문제입니다. 두 가지 방향의 조회가 모두 매우 빨라야 하므로, 두 개의 HashMap을 사용하여 양방향 매핑을 구축하는 것이 문제 해결의 핵심입니다.
두 분수가 주어졌을 때, 그 합을 계산하고 결과를 기약분수 형태로 출력하는 문제입니다. 분수의 덧셈 원리를 구현하고, 계산된 결과를 기약분수로 만들기 위해 최대공약수(GCD)를 구하는 과정이 핵심입니다.
주어진 M과 N 사이의 모든 소수(prime number)를 찾아 출력하는 문제입니다. 특정 범위 내의 모든 소수를 빠르고 효율적으로 찾아야 하므로, 에라토스테네스의 체(Sieve of Eratosthenes) 알고리즘을 사용하는 것이 핵심입니다.
두 자연수 A와 B가 주어졌을 때, 두 수의 최소공배수(LCM)를 구하는 문제입니다. '유클리드 호제법'으로 최대공약수(GCD)를 먼저 구한 뒤, 이를 이용하여 최소공배수를 구하는 수학적 관계식을 활용하는 것이 핵심입니다.
소수(Prime Number)의 정의를 정확히 이해하고,주어진 수열에서 소수의 개수를 세는 문제입니다. 소수 판별의 기본 로직을 제대로 이해했는지 테스트하는 대표 문제입니다.
N장의 카드를 가지고 특정 규칙에 따라 카드를 버리고 옮기는 과정을 반복했을 때, 마지막에 남는 카드를 찾는 문제입니다.
"자연수 N의 생성자를 찾는" 문제입니다. 숫자 자체 + 그 숫자의 각 자릿수를 더한 값이 N이 되는 경우,그 숫자를 생성자라고 부릅니다.
육각형 모양의 벌집이 확장되는 규칙을 이해하고, 입력된 방 번호가 몇 번째 겹(층)에 속하는지 구하는 문제입니다.
N개의 풍선이 원형으로 놓여있을 때, 특정 규칙에 따라 풍선을 터뜨리고 이동하는 과정을 시뮬레이션하는 문제입니다. 원형 구조를 효율적으로 흉내 낼 수 있는 덱(Deque) 자료구조를 사용하는 것이 문제 해결의 핵심입니다.
정수 N이 주어졌을 때, 공백과 별(*)을 이용하여 대칭 마름모 모양의 별 패턴을 출력하는 문제입니다. 공백과 별의 개수를 수식으로 표현하고, 이를 반복문으로 구현하는 것이 핵심입니다.
일정하지 않은 간격으로 심어진 가로수들 사이에 나무를 추가로 심어, 모든 나무가 동일한 간격이 되도록 할 때 필요한 최소 나무 수를 구하는 문제입니다. 모든 간격들의 최대공약수(GCD)를 구해 이상적인 간격을 찾고, 이를 통해 추가할 나무 수를 계산하는 것이 핵심입니다
현재 시각과 오븐 구이에 필요한 시간이 주어졌을 때, 요리가 끝나는 시각을 계산하는 문제입니다. 시간 계산 시 60분이 넘어가면 시간(Hour)을 올려주고, 24시가 넘어가면 0시로 바꿔주는 처리가 핵심입니다.
여러 개의 색종이를 흰색 도화지에 붙였을 때, 색종이가 붙은 영역의 총 넓이를 구하는 문제입니다. 2차원 배열을 도화지처럼 사용하여 색종이가 붙는 영역을 표시하고, 표시된 영역의 개수를 세는 방식으로 해결하는 것이 핵심입니다.
주어진 숫자 범위 M과 N 사이에서 소수(prime number)를 모두 찾아, 그 합과 최솟값을 구하는 문제입니다. 소수를 판별하는 방법을 구현하고, 범위 내에서 반복하며 조건을 처리하는 것이 핵심입니다.
손님에게 거슬러 줘야 할 돈을 가장 적은 수의 동전으로 교환해 주는 문제입니다. 탐욕 알고리즘(Greedy Algorithm)의 가장 대표적인 예시로, 가장 가치가 큰 동전부터 차례대로 거슬러 주는 방식으로 해결할 수 있습니다.
두 개의 N x M 크기 행렬 A와 B가 주어졌을 때, 두 행렬의 같은 위치에 있는 원소끼리 더하여 새로운 행렬을 만드는 기본적인 문제입니다. 2차원 배열을 선언하고, 이중 반복문을 사용하여 각 원소에 접근하는 것이 핵심입니다.
B진법으로 표현된 수 N을 10진법으로 바꾸는 문제입니다. 진법 변환의 핵심 원리를 이해하고, 문자열로 주어진 각 자리의 수를 실제 숫자 값으로 변환하여 계산하는 것이 중요합니다.
카지노의 블랙잭 게임 규칙을 단순화한 문제입니다. 주어진 N장의 카드 중에서 3장을 뽑아, 그 합이 M을 넘지 않으면서 M에 가장 가까운 값을 찾아야 합니다. 모든 가능한 조합을 탐색하는 브루트포스(Brute-force) 알고리즘을 사용하여 해결하는 것이 핵심입니다.
정확하게 N킬로그램의 설탕을 배달해야 할 때, 3킬로그램 봉지와 5킬로그램 봉지를 조합하여 최소한의 봉지로 배달하는 방법을 찾는 문제입니다. 그리디 알고리즘(Greedy Algorithm)으로 접근하되, 그리디가 통하지 않는 예외를 처리하는 것이 핵심입니다.
낮에는 올라가고 밤에는 미끄러지는 달팽이가 나무 막대를 모두 올라가는 데 며칠이 걸리는지 계산하는 문제입니다. 반복문을 사용하면 반드시 시간 초과가 발생하므로, 규칙을 찾아 수학적인 계산식으로 풀어야 하는 것이 핵심입니다.
주어진 시간보다 45분 일찍 알람을 설정하는 문제입니다. 시간 계산에서 '분'이 부족할 때 '시'에서 빌려오는 개념과, 0시에서 1시간을 되돌리면 23시가 되는 시간의 순환을 정확히 구현하는 것이 핵심입니다.
초기 단계의 정사각형에서 점을 추가하는 과정을 반복할 때, N번째 단계에서의 총 점의 개수를 구하는 문제입니다. 복잡해 보이는 과정 속에 숨어있는 간단한 수학적 규칙을 찾아내는 것이 핵심입니다.
여러 개의 문자가 합쳐져 하나의 알파벳으로 취급되는 '크로아티아 알파벳'의 규칙에 따라, 주어진 단어가 총 몇 개의 알파벳으로 이루어져 있는지 세는 문제입니다. 복잡한 조건의 문자열 문제를 치환(Replacement) 아이디어를 통해 간단하게 해결하는 것이 핵심입니다.
주어진 정수 n에 대해, n보다 크거나 같은 소수 중 가장 작은 소수를 찾는 문제입니다. 효율적인 소수 판별 알고리즘을 구현하고, 입력값의 자료형 범위에 주의하는 것이 문제 해결의 핵심입니다.
자연수 n에 대해, n보다 크고 2n보다 작거나 같은 소수의 개수를 구하는 문제입니다. 여러 테스트 케이스에 대해 소수 개수를 빠르게 찾아야 하므로, 에라토스테네스의 체를 이용해 특정 범위까지의 모든 소수를 미리 구해놓는(전처리) 방식이 핵심입니다.
소괄호 ()와 대괄호 \[] 두 종류의 괄호가 포함된 문자열에서, 모든 괄호가 올바르게 짝을 이루고 있는지 판별하는 문제입니다. 괄호 짝 맞추기 문제의 심화 버전으로, 스택을 이용하여 각 괄호의 종류까지 고려하여 짝을 맞추는 로직을 구현하는 것이 핵심입니다.
1번부터 30번까지의 학생 중 과제를 제출한 28명의 출석번호가 주어질 때, 제출하지 않은 2명의 출석번호를 찾는 문제입니다. Boolean 배열을 출석부처럼 활용하여 제출 여부를 체크하는 간단한 아이디어로 해결할 수 있습니다.
옛날 전화기 다이얼 방식으로 영단어를 입력할 때 걸리는 최소 시간을 계산하는 문제입니다. 각 알파벳이 어떤 숫자에 해당하는지 규칙을 찾아 매핑하고, switch 문을 활용하여 깔끔하게 구현하는 것이 핵심입니다.
N개의 출입 기록이 주어졌을 때, 현재 회사에 남아있는 모든 사람의 이름을 사전 순서의 역순으로 출력하는 문제입니다. 데이터를 빠르게 추가, 삭제, 조회해야 하므로, 해시(Hash) 기반의 자료구조를 사용하는 것이 핵심입니다.
주어진 괄호 문자열이 올바르게 짝지어졌는지, 즉 '올바른 괄호 문자열(VPS, Valid Parenthesis String)'인지 판별하는 문제입니다.
주어진 여러 개의 점들을 모두 포함하는 가장 작은 직사각형의 넓이를 구하는 문제입니다. 직사각형의 변은 x축과 y축에 평행해야 합니다. 모든 점들의 x, y 좌표 중에서 최솟값과 최댓값을 찾는 것이 문제 해결의 핵심입니다.
여러 줄의 단어를 칠판에 적고, 이를 세로로 순서대로 읽어 새로운 단어를 만드는 문제입니다. 각 단어의 길이가 다를 수 있기 때문에, 존재하지 않는 글자는 건너뛰고 읽는 로직을 구현하는 것이 핵심입니다.
1번부터 N번까지의 번호가 순서대로 담긴 바구니들을, 주어진 구간에 따라 순서를 거꾸로 뒤집는 작업을 반복하는 문제입니다. 배열의 특정 부분을 역순으로 만드는 알고리즘을 정확하게 구현하는 것이 핵심입니다.
N명의 온라인 저지 회원의 정보를 나이순으로, 나이가 같으면 가입한 순서대로 정렬하는 문제입니다. 이 문제의 핵심은 '안정 정렬(Stable Sort)'의 개념을 이해하고, Java의 내장 정렬 기능이 이를 지원한다는 사실을 활용하는 것입니다.
입력의 종료 시점이 명시되지 않은 상태에서, 입력이 들어오는 동안 계속해서 두 수의 합을 출력하는 문제입니다. EOF(End-of-File) 처리에 대해 이해하고 구현할 수 있는지를 묻는 기본적인 입력 처리 문제입니다.
주어진 단어가 앞에서부터 읽을 때와 뒤에서부터 읽을 때가 같은지, 즉 '팰린드롬(Palindrome)'인지 판별하는 문제입니다. 문자열의 양쪽 끝에서부터 중앙으로 좁혀오며 비교하는 투 포인터(Two Pointers) 알고리즘의 기초를 연습하기 좋은 문제입니다.
10진법으로 주어진 수 N을 B진법으로 변환하는 문제입니다. 10진법 수를 다른 진법으로 변환하는 고전적인 알고리즘인 '나머지 연산의 반복'과정을 정확하게 구현하는 것이 핵심입니다.
주어진 문자열 S에서 만들 수 있는 모든 '부분 문자열(substring)' 중에서, 서로 다른 것이 총 몇 개인지 세는 문제입니다. HashSet을 이용하여 중복을 효율적으로 제거하는 방법과, 이중 for 반복문으로 모든 부분 문자열을 생성하는 로직을 묻는 문제입니다
2차원 평면 위의 N개의 점을 정렬하는 문제입니다. 정렬 기준이 x좌표, y좌표 순으로 두 가지이므로, 다중 조건 정렬을 어떻게 구현하는지가 핵심입니다. Java에서는 Comparable 인터페이스를 활용하여 객체의 정렬 기준을 직접 정의할 수 있습니다.
2차원 평면 위의 N개의 점을 정렬하는 문제로, 이전 문제(11650번)와 정렬 기준의 우선순위만 다릅니다. y좌표를 우선으로, x좌표를 차선으로 정렬하는 다중 조건 정렬을 Comparable 인터페이스로 구현하는 것이 핵심입니다.
주어진 정수 N을 소인수분해하여 그 결과를 오름차순으로 출력하는 문제입니다. 정수론의 기본 개념인 소인수분해를 구현하는 가장 대표적인 문제로, 시험 분할법(Trial Division)과 제곱근 최적화를 이해하는 것이 핵심입니다.
N명의 사람이 원을 이루어 앉아 K번째 사람을 계속해서 제거해 나갈 때, 제거되는 사람들의 순서(요세푸스 순열)를 구하는 문제입니다. 원형으로 순환하는 구조를 큐(Queue) 자료구조를 이용해 효과적으로 시뮬레이션하는 것이 핵심입니다.
학생들이 순서대로 간식을 받아야 하는 상황에서, 순서가 맞지 않는 학생들을 위한 임시 대기 공간을 활용하여 모두가 순서대로 간식을 받을 수 있는지 판별하는 문제입니다. 문제의 상황을 스택(Stack)과 큐(Queue)라는 자료구조로 적절히 모델링하는 것이 핵심입니다.
N개의 창문과 N명의 사람이 있을 때, 특정 규칙으로 창문을 열고 닫는 과정을 반복한 후 마지막에 열려있는 창문의 개수를 구하는 문제입니다.
세 막대의 길이가 주어졌을 때, 막대의 길이를 줄여서 만들 수 있는 가장 둘레가 긴 삼각형의 둘레를 구하는 문제입니다. 삼각형의 결정조건을 이해하고, 이를 만족시키기 위해 가장 긴 변의 길이를 어떻게 조절해야 하는지가 문제 해결의 핵심입니다.
가장 아랫부분의 정사각형 개수가 N개일 때, 특정 규칙으로 쌓인 도형의 전체 둘레 길이를 구하는 문제입니다. 복잡해 보이는 도형에서 간단한 수학적 규칙을 찾아내는 패턴 인식 능력과, 큰 수에 대한 자료형 선택이 핵심입니다.
주어진 짝수를 두 소수의 합으로 나타내는 방법이 총 몇 가지인지 구하는 문제입니다.
정수를 저장하는 큐(Queue)를 구현하고, 6가지 종류의 명령에 따라 결과를 출력하는 문제입니다.
N개의 좌표 값이 주어졌을 때, 각 좌표를 "자신보다 작은 좌표의 개수"로 변환하는 '좌표 압축' 문제입니다. 값의 범위는 매우 넓지만 개수는 한정적일 때, 정렬과 HashMap을 이용해 효율적으로 순위(rank)를 매기는 방법을 묻는 핵심 유형입니다.
두 개의 미지수 x, y를 가지는 연립 일차방정식의 해를 찾는 문제입니다. 이 문제는 수학 공식을 이용해 풀 수도 있지만, 문제에 주어진 x와 y의 값 범위라는 결정적인 힌트를 활용하여 브루트포스(Brute-force) 방식으로 간단하게 해결할 수 있습니다.
주어진 의사 코드(pseudo-code)의 실행 횟수와 시간 복잡도를 수학적으로 분석하는 문제입니다. 내부 반복문의 시작점이 외부 반복문에 종속되는 형태의 이중 for문을 등차수열의 합 공식을 이용하여 계산하는 것이 핵심입니다.
주어진 3중 for문 코드의 수행 횟수와 시간 복잡도를 수학적으로 분석하는 문제입니다. i < j < k 조건을 만족하는 반복문의 구조가 조합(Combination)의 개념과 동일하다는 것을 파악하고, 조합 공식을 이용해 O(1)에 답을 구하는 것이 핵심입니다.
알고리즘의 시간 복잡도를 나타내는 Big-O 표기법의 수학적 정의를 제대로 이해하고 있는지 확인하는 문제입니다. 코딩 능력보다는, 주어진 정의를 코드로 정확하게 번역하는 논리적 사고력이 핵심입니다.
정수를 저장하는 스택을 구현하고, 5가지 종류의 명령에 따라 결과를 출력하는 문제입니다.
정수를 저장하는 덱(Deque)을 구현하고, 8가지 종류의 명령에 따라 결과를 출력하는 문제입니다.
큐와 스택이 섞여있는 N개의 자료구조에 M개의 원소를 차례로 삽입-출력했을 때, 최종적으로 나오는 M개의 원소 수열을 구하는 문제입니다.