알고리즘 학습 가이드
소개
이 폴더는 알고리즘과 자료구조를 체계적으로 학습하기 위한 자료를 담고 있습니다. 복잡도 분석부터 고급 알고리즘까지 단계별로 학습할 수 있으며, 코딩 인터뷰와 알고리즘 대회 준비에 도움이 됩니다.
대상 독자: 프로그래밍 기초를 아는 개발자, 코딩 테스트 준비자
학습 로드맵
[기초] [중급] [고급]
│ │ │
▼ ▼ ▼
복잡도 분석 ─────▶ 분할 정복 ───────▶ 동적 프로그래밍
│ │ │
▼ ▼ ▼
배열/문자열 ────▶ 트리/BST ────────▶ 세그먼트 트리
│ │ │
▼ ▼ ▼
스택/큐 ────────▶ 그래프 기초 ─────▶ 네트워크 플로우
│ │ │
▼ ▼ ▼
해시테이블 ────▶ 최단경로/MST ────▶ 고급 DP 최적화
선수 지식
- 프로그래밍 기초 (변수, 제어문, 함수)
- 기본 자료구조 (배열, 리스트)
- C, C++, 또는 Python 중 하나 이상의 언어
파일 목록
기초 자료구조 (01-05)
탐색과 분할정복 (06-08)
트리 자료구조 (09-11)
그래프 (12-17)
| 파일명 |
난이도 |
주요 내용 |
| 12_Graph_Basics.md |
⭐⭐ |
그래프 표현, DFS, BFS |
| 13_Topological_Sort.md |
⭐⭐⭐ |
Kahn, DFS 기반, 사이클 탐지 |
| 14_Shortest_Path.md |
⭐⭐⭐ |
Dijkstra, Bellman-Ford, Floyd-Warshall |
| 15_Minimum_Spanning_Tree.md |
⭐⭐⭐ |
Kruskal, Prim, Union-Find |
| 16_LCA_and_Tree_Queries.md |
⭐⭐⭐ |
Binary Lifting, Sparse Table |
| 17_Strongly_Connected_Components.md |
⭐⭐⭐⭐ |
Tarjan, Kosaraju, 2-SAT |
DP와 수학 (18-22)
| 파일명 |
난이도 |
주요 내용 |
| 18_Dynamic_Programming.md |
⭐⭐⭐ |
메모이제이션, 냅색, LCS, LIS |
| 19_Greedy_Algorithms.md |
⭐⭐ |
활동 선택, 허프만 코딩, 탐욕 vs DP |
| 20_Bitmask_DP.md |
⭐⭐⭐ |
비트 연산, TSP, 집합 DP |
| 21_Math_and_Number_Theory.md |
⭐⭐⭐ |
모듈러, GCD/LCM, 소수, 조합론 |
| 22_String_Algorithms.md |
⭐⭐⭐ |
KMP, Rabin-Karp, Z-알고리즘 |
고급 자료구조 (23-24)
고급 그래프 (25)
특수 주제 (26-28)
마무리
추천 학습 순서
1단계: 기초 자료구조 (1주)
2단계: 정렬과 탐색 (1주)
3단계: 트리 (1주)
4단계: 그래프 기초 (1~2주)
5단계: 고급 그래프 (1주)
6단계: DP와 수학 (2주)
7단계: 고급 자료구조 (1주)
8단계: 고급 그래프 및 특수 주제 (2주+)
마무리
실습 환경
언어별 준비
# C/C++ (GCC)
gcc --version
g++ --version
# Python
python3 --version
# 온라인 환경
# - https://www.onlinegdb.com/
# - https://replit.com/
추천 도구
- IDE: VS Code, CLion, PyCharm
- 온라인 저지: 백준(BOJ), LeetCode, 프로그래머스
- 시각화: https://visualgo.net/
복잡도 빠른 참조
| 복잡도 |
이름 |
예시 |
n=10^6 기준 |
| O(1) |
상수 |
배열 접근 |
즉시 |
| O(log n) |
로그 |
이진 탐색 |
~20 연산 |
| O(n) |
선형 |
순차 탐색 |
10^6 연산 |
| O(n log n) |
선형 로그 |
병합 정렬 |
~2×10^7 연산 |
| O(n²) |
제곱 |
버블 정렬 |
10^12 연산 (주의) |
| O(2^n) |
지수 |
부분집합 |
불가능 |
관련 자료
다른 폴더와의 연계
외부 자료
학습 팁
- 직접 구현: 라이브러리 사용 전에 직접 구현해보기
- 복잡도 분석: 모든 코드에 대해 시간/공간 복잡도 계산
- 다양한 언어: C, C++, Python으로 같은 알고리즘 구현
- 문제 풀이: 각 레슨 후 관련 문제 3~5개 풀기
- 오답 노트: 틀린 문제는 왜 틀렸는지 기록
코딩 테스트 준비 가이드
난이도별 목표
| 수준 |
목표 |
필수 레슨 |
| 입문 |
기초 문제 해결 |
01~08 |
| 중급 |
대기업 코딩테스트 |
01~17 |
| 고급 |
알고리즘 대회 |
01~25 |
| 최상급 |
ICPC/IOI 수준 |
전체 (26~29 포함) |
시간 제한 기준
- 1초: O(n log n) 이하 (n ≤ 10^6)
- 2초: O(n²) 가능 (n ≤ 5000)
- 5초: O(n²) 가능 (n ≤ 10000)