코딩테스트에 자주 출제되는 67개 알고리즘 유형별로 이론 설명, 구현 예시, 실전 문제와 해설을 제공하는 학습 자료입니다. 모든 코드는 Golang으로 작성되어 있으며, go run 명령으로 바로 실행할 수 있습니다.
- 코딩테스트를 준비하는 학습자
- 알고리즘 기초부터 심화까지 체계적으로 학습하고 싶은 분
- Golang으로 알고리즘을 구현하고 싶은 분
총 67개 알고리즘 유형을 학습 난이도 순서대로 정리했습니다. 기존 핵심 알고리즘(01~26번), 확장 알고리즘(27~53번), Tier_1 코테 실전 필수(54~59번), Tier_2 코테 상위권 차별화(60~67번)로 구성됩니다.
| 번호 | 알고리즘 | 폴더 링크 |
|---|---|---|
| 01 | 구현과 시뮬레이션 | 01-implementation-and-simulation |
| 02 | 브루트포스 | 02-bruteforce |
| 03 | 정렬 | 03-sorting |
| 04 | 스택과 큐 | 04-stack-and-queue |
| 05 | 해시 | 05-hash |
| 06 | 누적합 | 06-prefix-sum |
| 07 | 수학과 정수론 | 07-math-and-number-theory |
| 08 | 이진 탐색 | 08-binary-search |
| 09 | 파라메트릭 서치 | 09-parametric-search |
| 10 | 투 포인터와 슬라이딩 윈도우 | 10-two-pointer-and-sliding-window |
| 11 | 그리디 | 11-greedy |
| 12 | 힙과 우선순위 큐 | 12-heap-and-priority-queue |
| 13 | 트리 | 13-tree |
| 14 | 이진 트리 | 14-binary-tree |
| 15 | 그래프 탐색 DFS | 15-graph-dfs |
| 16 | 그래프 탐색 BFS | 16-graph-bfs |
| 17 | 백트래킹 | 17-backtracking |
| 18 | 분할 정복 | 18-divide-and-conquer |
| 19 | 동적 프로그래밍 | 19-dynamic-programming |
| 20 | 유니온 파인드 | 20-union-find |
| 21 | 최단 경로 | 21-shortest-path |
| 22 | 최소 신장 트리 | 22-minimum-spanning-tree |
| 23 | 위상 정렬 | 23-topological-sort |
| 24 | 그래프 알고리즘 기타 | 24-graph-advanced |
| 25 | 세그먼트 트리 | 25-segment-tree |
| 26 | 문자열 알고리즘 | 26-string-algorithm |
코딩테스트 빈출 및 실력 향상에 필요한 27개 확장 알고리즘입니다. BOJ(백준 온라인 저지) 문제 수 기준으로 우선순위를 분류했습니다.
| 번호 | 알고리즘 | 폴더 링크 |
|---|---|---|
| 27 | 기하학 | 27-geometry |
| 28 | 조합론 | 28-combinatorics |
| 29 | 비트마스킹 | 29-bitmask |
| 번호 | 알고리즘 | 폴더 링크 |
|---|---|---|
| 30 | 게임 이론 | 30-game-theory |
| 31 | 확률론 | 31-probability |
| 32 | 비트필드 DP | 32-bitmask-dp |
| 33 | 최대 유량 | 33-maximum-flow |
| 34 | 소수 판정 | 34-primality-test |
| 35 | 오프라인 쿼리 | 35-offline-queries |
| 36 | 분할 정복 거듭제곱 | 36-exponentiation-by-squaring |
| 37 | 배낭 문제 | 37-knapsack |
| 38 | DAG | 38-dag |
| 39 | 좌표 압축 | 39-coordinate-compression |
| 번호 | 알고리즘 | 폴더 링크 |
|---|---|---|
| 40 | 재귀 | 40-recursion |
| 41 | 유클리드 호제법 | 41-euclidean-algorithm |
| 42 | 볼록 껍질 | 42-convex-hull |
| 43 | 이분 매칭 | 43-bipartite-matching |
| 44 | 에라토스테네스의 체 | 44-sieve-of-eratosthenes |
| 45 | 포함 배제의 원리 | 45-inclusion-exclusion |
| 46 | LCA | 46-lca |
| 47 | 희소 배열 | 47-sparse-table |
| 48 | 해싱 | 48-hashing |
| 49 | 모듈로 곱셈 역원 | 49-modular-inverse |
| 50 | 플로이드-워셜 | 50-floyd-warshall |
| 51 | 트라이 | 51-trie |
| 52 | 덱 | 52-deque |
| 53 | 소인수분해 | 53-prime-factorization |
코딩테스트 실전에서 자주 등장하는 필수 유형입니다.
| 번호 | 알고리즘 | 폴더 링크 |
|---|---|---|
| 54 | 트리 DP | 54-tree-dp |
| 55 | LIS (최장 증가 부분 수열) | 55-lis |
| 56 | 제곱근 분할법 | 56-sqrt-decomposition |
| 57 | 중간에서 만나기 | 57-meet-in-the-middle |
| 58 | 0-1 BFS | 58-zero-one-bfs |
| 59 | 플러드 필 | 59-flood-fill |
상위권 코딩테스트에서 차별화를 위한 고급 알고리즘입니다.
| 번호 | 알고리즘 | 폴더 링크 |
|---|---|---|
| 60 | FFT (고속 푸리에 변환) | 60-fft |
| 61 | 삼분 탐색 | 61-ternary-search |
| 62 | 오일러 경로 테크닉 | 62-euler-tour |
| 63 | 최소 비용 최대 유량 | 63-mcmf |
| 64 | 볼록 껍질 트릭 | 64-convex-hull-trick |
| 65 | 가우스 소거법 | 65-gaussian-elimination |
| 66 | HLD (Heavy-Light Decomposition) | 66-hld |
| 67 | 센트로이드 분할 | 67-centroid-decomposition |
기존 핵심 알고리즘(01~26번)을 번호 순서대로 학습한 뒤, 확장 알고리즘(27~53번)을 우선순위 순서대로 학습하는 것을 권장합니다.
- 01 구현과 시뮬레이션 - 문제를 코드로 옮기는 기본기를 다집니다
- 02 브루트포스 - 모든 경우를 탐색하는 완전 탐색을 익힙니다
- 03 정렬 - 다양한 정렬 알고리즘과 정렬 활용법을 배웁니다
- 04 스택과 큐 - 기본 자료구조의 활용법을 익힙니다
- 05 해시 - 해시 테이블을 활용한 빠른 탐색을 배웁니다
- 06 누적합 - 구간 합을 효율적으로 계산하는 기법을 익힙니다
- 07 수학과 정수론 - GCD, 소수 판별 등 수학 기반 알고리즘을 배웁니다
- 08 이진 탐색 - 정렬된 데이터에서 빠르게 탐색하는 방법을 익힙니다
- 09 파라메트릭 서치 - 최적화 문제를 결정 문제로 바꾸는 기법을 배웁니다
- 10 투 포인터와 슬라이딩 윈도우 - 배열/문자열의 구간 처리 기법을 익힙니다
- 11 그리디 - 탐욕적 선택으로 최적해를 구하는 방법을 배웁니다
- 12 힙과 우선순위 큐 - 우선순위 기반 자료구조를 활용합니다
- 13 트리 - 트리 자료구조의 기본 개념과 순회를 배웁니다
- 14 이진 트리 - 이진 트리의 특성과 활용법을 익힙니다
- 15 그래프 탐색 DFS - 깊이 우선 탐색을 배웁니다
- 16 그래프 탐색 BFS - 너비 우선 탐색을 배웁니다
- 17 백트래킹 - 조건을 만족하는 해를 탐색하는 기법을 익힙니다
- 18 분할 정복 - 문제를 작은 부분으로 나누어 해결하는 방법을 배웁니다
- 19 동적 프로그래밍 - 중복 부분 문제를 효율적으로 해결하는 기법을 배웁니다
- 20 유니온 파인드 - 집합의 합치기와 찾기 연산을 익힙니다
- 21 최단 경로 - Dijkstra, Bellman-Ford 등 최단 경로 알고리즘을 배웁니다
- 22 최소 신장 트리 - Kruskal, Prim 알고리즘을 익힙니다
- 23 위상 정렬 - 방향 그래프의 순서 결정 방법을 배웁니다
- 24 그래프 알고리즘 기타 - 이분 매칭, 네트워크 플로우 등을 다룹니다
- 25 세그먼트 트리 - 구간 쿼리를 효율적으로 처리하는 자료구조를 배웁니다
- 26 문자열 알고리즘 - KMP, 트라이 등 문자열 처리 알고리즘을 익힙니다
기존 핵심 알고리즘을 모두 학습한 후, 코딩테스트에서 자주 출제되는 필수 알고리즘을 학습합니다.
- 27 기하학 - CCW, 외적 등 기하학적 연산과 문제 풀이를 배웁니다
- 28 조합론 - 순열, 조합, 이항 계수 등 조합론적 기법을 익힙니다 (선수: 07)
- 29 비트마스킹 - 비트 연산을 활용한 집합 표현과 최적화를 배웁니다
코딩테스트에 빈번히 출제되는 알고리즘을 학습합니다.
- 30 게임 이론 - 스프라그-그런디 정리 등 게임 전략을 배웁니다 (선수: 19)
- 31 확률론 - 확률적 사고와 기댓값 계산을 익힙니다 (선수: 07, 19)
- 32 비트필드 DP - 비트마스크와 DP를 결합한 상태 압축 기법을 배웁니다 (선수: 19, 29)
- 33 최대 유량 - 네트워크 플로우와 최대 유량 알고리즘을 익힙니다 (선수: 15, 16, 24)
- 34 소수 판정 - 밀러-라빈 등 효율적인 소수 판정 알고리즘을 배웁니다 (선수: 07)
- 35 오프라인 쿼리 - Mo's 알고리즘 등 쿼리 재배치 기법을 익힙니다 (선수: 03, 25)
- 36 분할 정복 거듭제곱 - 빠른 거듭제곱과 행렬 거듭제곱을 배웁니다 (선수: 18, 07)
- 37 배낭 문제 - 0/1 배낭, 무한 배낭 등 배낭 문제 변형을 익힙니다 (선수: 19)
- 38 DAG - 방향 비순환 그래프에서의 DP와 최장 경로를 배웁니다 (선수: 15, 23, 19)
- 39 좌표 압축 - 큰 좌표 범위를 압축하여 효율적으로 처리하는 기법을 익힙니다 (선수: 03)
실력을 한 단계 끌어올리기 위한 심화 알고리즘을 학습합니다.
- 40 재귀 - 재귀적 사고와 다양한 재귀 패턴을 배웁니다 (선수: 18)
- 41 유클리드 호제법 - 최대공약수와 확장 유클리드 알고리즘을 익힙니다 (선수: 07)
- 42 볼록 껍질 - 컨벡스 헐 알고리즘과 기하학적 응용을 배웁니다 (선수: 27, 03)
- 43 이분 매칭 - 이분 그래프에서의 최대 매칭을 익힙니다 (선수: 15, 33)
- 44 에라토스테네스의 체 - 효율적인 소수 생성과 응용을 배웁니다 (선수: 07)
- 45 포함 배제의 원리 - 집합의 합집합 크기 계산과 응용을 익힙니다 (선수: 28, 07)
- 46 LCA - 최소 공통 조상 알고리즘과 트리 쿼리를 배웁니다 (선수: 13, 15)
- 47 희소 배열 - 구간 최솟값/최댓값 쿼리를 O(1)에 처리하는 기법을 익힙니다 (선수: 06, 25)
- 48 해싱 - 다항식 해싱, 라빈-카프 등 해싱 기법을 배웁니다 (선수: 05, 26)
- 49 모듈로 곱셈 역원 - 모듈러 연산에서의 나눗셈 처리를 익힙니다 (선수: 07, 36)
- 50 플로이드-워셜 - 모든 쌍 최단 경로 알고리즘을 배웁니다 (선수: 21)
- 51 트라이 - 문자열 검색에 특화된 트리 자료구조를 익힙니다 (선수: 13, 26)
- 52 덱 - 양방향 큐와 슬라이딩 윈도우 최솟값/최댓값을 배웁니다 (선수: 04)
- 53 소인수분해 - 효율적인 소인수분해 알고리즘과 응용을 익힙니다 (선수: 07, 34)
확장 알고리즘을 모두 학습한 후, 코딩테스트 실전에서 자주 등장하는 유형을 학습합니다.
- 54 트리 DP - 트리 구조에서의 동적 프로그래밍을 배웁니다 (선수: 13, 19)
- 55 LIS - 최장 증가 부분 수열과 이진 탐색 최적화를 익힙니다 (선수: 08, 19)
- 56 제곱근 분할법 - 구간 쿼리를 √N 블록으로 처리하는 기법을 배웁니다 (선수: 35, 25)
- 57 중간에서 만나기 - 탐색 공간을 반으로 나누어 효율적으로 해결하는 기법을 익힙니다 (선수: 02, 03)
- 58 0-1 BFS - 가중치가 0 또는 1인 그래프에서의 최단 경로를 배웁니다 (선수: 16, 52, 21)
- 59 플러드 필 - 영역 채우기와 연결 요소 탐색을 익힙니다 (선수: 15, 16)
상위권 코딩테스트에서 차별화를 위한 고급 알고리즘을 학습합니다.
- 60 FFT - 고속 푸리에 변환을 이용한 다항식 곱셈을 배웁니다 (선수: 07, 18)
- 61 삼분 탐색 - 유니모달 함수에서의 극값 탐색을 익힙니다 (선수: 08)
- 62 오일러 경로 테크닉 - 트리를 배열로 펼쳐 구간 쿼리를 처리하는 기법을 배웁니다 (선수: 13, 25, 15)
- 63 최소 비용 최대 유량 - 비용이 있는 네트워크 플로우를 익힙니다 (선수: 33, 21)
- 64 볼록 껍질 트릭 - DP 최적화를 위한 기하학적 기법을 배웁니다 (선수: 19, 42)
- 65 가우스 소거법 - 연립방정식과 행렬 연산을 익힙니다 (선수: 07)
- 66 HLD - 트리 경로 쿼리를 세그먼트 트리로 처리하는 기법을 배웁니다 (선수: 13, 25, 15)
- 67 센트로이드 분할 - 트리를 분할하여 경로 쿼리를 효율적으로 처리합니다 (선수: 13, 18)
HackerRank 코딩테스트 대비 7일 학습 플랜을 별도로 제공합니다.
- 📋 STUDY_GUIDE.md - 학습 전략, 우선순위 선정 근거, 일별 목표
- 📁 weekly-prep/ - Day 1~7 일별 학습 계획 및 추천 문제
| 일차 | 주제 | 폴더 |
|---|---|---|
| Day 1 | 구현, 브루트포스 | day1-implementation-bruteforce |
| Day 2 | 그리디, 정렬, DP | day2-greedy-sorting-dp |
| Day 3 | BFS, DFS, 해시 | day3-bfs-dfs-hash |
| Day 4 | 문자열, 백트래킹, 누적합 | day4-string-backtracking-prefixsum |
| Day 5 | 이진탐색, 스택, 투포인터 | day5-binarysearch-stack-twopointer |
| Day 6 | 힙, 기출 유형 | day6-heap-possible |
| Day 7 | 복습, 모의고사 | day7-review-mock |
모든 알고리즘 폴더는 동일한 구조를 따릅니다.
XX-algorithm-name/
├── README.md # 폴더 안내
├── theory.md # 이론 및 개념 설명
├── examples/ # 기본 구현 예시 코드 (.go)
└── problems/ # 연습 문제 및 풀이
├── 01-easy-*/ # 쉬운 난이도 문제
├── 02-medium-*/ # 보통 난이도 문제
└── 03-hard-*/ # 어려운 난이도 문제
각 문제 폴더에는 다음 파일이 포함됩니다.
problem.md- 문제 설명, 입출력 형식, 예제, 제약 조건solution.go- Golang 풀이 코드explanation.md- 풀이 해설 (접근 방식, 핵심 아이디어, 복잡도 분석)
프로젝트의 구조적 정확성을 자동으로 검증할 수 있습니다.
# 셸 스크립트로 67개 폴더 전체 구조 검증
bash validate.sh
# Go 속성 기반 테스트로 정확성 속성 검증
cd validate && go test ./... -v -count=1검증 항목:
- 67개 폴더 존재 및 필수 파일 포함 여부
- 폴더 명명 규칙 (두 자리 번호 + 케밥 케이스)
- 이론 문서 필수 섹션 (개념, 동작 원리, 복잡도, 적합한 문제 유형)
- 문제/해설 문서 필수 섹션
- 난이도 분포 균형 (easy, medium, hard)
- Go 코드 규칙 (package main, func main(), 한국어 주석, 표준 라이브러리)
- 확장 알고리즘 선수 학습 참조
- 이론 문서 상세 보충 완전성 (단계별 추적, 실전 팁, 관련 알고리즘 비교)
- Go 공식 사이트에서 운영체제에 맞는 설치 파일을 다운로드합니다
- 설치 후 터미널에서 버전을 확인합니다
go version예시 코드 실행:
go run 01-implementation-and-simulation/examples/simulation.go풀이 코드 실행 (표준 입력으로 데이터 전달):
go run 01-implementation-and-simulation/problems/01-easy-matrix-rotation/solution.go < input.txt또는 직접 입력:
go run 01-implementation-and-simulation/problems/01-easy-matrix-rotation/solution.go- Go 1.21 이상을 권장합니다
- 모든 코드는 표준 라이브러리만 사용하므로 별도의 의존성 설치가 필요 없습니다
67개 알고리즘 유형이 모두 완성된 상태이며, 추가 확장을 계획하고 있습니다. 자세한 내용은 아래 문서를 참고하세요.
- TODO_NEW.md - Tier 1/2 이후 추가 알고리즘 후보
- todo.md - 장기 확장 알고리즘 목록 (BOJ 분류 기준)