🌐 전체 29편 강의 보기 — https://coding-now.com/blog/algorithm
한국어 무료 알고리즘·자료구조 강의 29편 (백준 골드 목표) · Coding Now
백준 골드 수준 · 프로그래머스 Lv.3 · 코딩 테스트 합격을 목표로 하는 파이썬 알고리즘 완성 커리큘럼
Python 3.10+ 전용 · PEP 8 준수 · 모든 예제 시간·공간 복잡도 명시
| 목표 |
기준 |
| 백준 온라인 저지 |
골드 I ~ V 수준 문제 독립 풀이 |
| 프로그래머스 |
Lv. 3 문제 70% 이상 통과 |
| 코딩 테스트 |
삼성 SW 역량 / 카카오 / 네이버 등 기업 코딩 테스트 합격 |
Python : 3.10 이상 (match-case, structural pattern matching 사용)
편집기 : VS Code + Python 확장 (pylint, black)
가상환경 : python -m venv .venv && source .venv/bin/activate
| 항목 |
기준 |
비고 |
| 시간 제한 |
1초 ≈ 1억(10⁸) 연산 |
PyPy 사용 시 약 3~5배 빠름 |
| 메모리 제한 |
256 MB |
int 하나 ≈ 28 bytes (CPython) |
| 재귀 깊이 |
기본 1,000 |
sys.setrecursionlimit(10**6) 필요 |
Lecture_Algorithm_Python/
├── README.md ← 이 파일
│
├── 01_기초/
│ ├── 01_시간복잡도/ Big-O 표기, 실행 시간 측정
│ ├── 02_파이썬_입출력/ sys.stdin, 빠른 I/O 패턴
│ └── 03_자료형_복잡도/ list/deque/set/dict 연산 복잡도
│
├── 02_기본_자료구조/
│ ├── 04_배열과_문자열/ 슬라이싱, 문자열 메서드, 아스키
│ ├── 05_스택과_큐/ list vs deque, 괄호, 후위표기
│ ├── 06_해시/ dict, set, Counter, 해시 충돌
│ ├── 07_힙과_우선순위큐/ heapq, 최소/최대 힙, Top-K
│ └── 08_연결_리스트/ 단일·이중·원형 연결 리스트 구현
│
├── 03_정렬과_탐색/
│ ├── 09_정렬_알고리즘/ 버블·삽입·병합·퀵 정렬
│ ├── 10_파이썬_정렬_활용/ sorted/sort, key, 다중 키 정렬
│ ├── 11_이진_탐색/ 직접 구현 + bisect 모듈
│ └── 12_매개변수_탐색/ Parametric Search 패턴
│
├── 04_그래프_기초/
│ ├── 13_그래프_표현/ 인접 리스트/행렬, 방향/가중치
│ ├── 14_DFS/ 재귀·스택 DFS, 연결 요소
│ ├── 15_BFS/ deque BFS, 최단 거리, 격자
│ └── 16_위상_정렬/ Kahn(BFS)·DFS 위상 정렬
│
├── 05_트리/
│ ├── 17_트리_순회/ 전·중·후위·레벨 순회
│ ├── 18_이진_탐색_트리/ BST 삽입/탐색/삭제
│ └── 19_트라이/ 문자열 검색, 자동완성, 접두사
│
├── 06_DP와_그리디/
│ ├── 20_DP_기초/ 메모이제이션·타뷸레이션
│ ├── 21_DP_심화/ LCS, LIS, 0/1 배낭, 행렬 곱
│ ├── 22_그리디/ 회의실·동전·활동 선택
│ └── 23_분할_정복/ 병합·퀵·고속 거듭제곱·CCW
│
├── 07_고급_그래프/
│ ├── 24_다익스트라/ 우선순위 큐 기반 최단 경로
│ ├── 25_플로이드_워셜/ 모든 쌍 최단 경로, DP 관점
│ └── 26_최소_신장_트리/ Kruskal(유니온 파인드)·Prim
│
└── 08_응용/
└── 27_실전_패턴/ 투 포인터·슬라이딩 윈도우·비트마스킹·구간 합
| Part |
# |
폴더 |
주제 |
| 01 기초 |
1 |
01_시간복잡도 |
Big-O 표기, 실행 시간·메모리 한계, 시간 측정 |
| 01 기초 |
2 |
02_파이썬_입출력 |
sys.stdin.readline, sys.stdout.write, EOF 처리 |
| 01 기초 |
3 |
03_자료형_복잡도 |
list/deque/set/dict 연산별 시간복잡도 |
| 02 기본 자료구조 |
4 |
04_배열과_문자열 |
슬라이싱, 문자열 메서드, 아스키 활용 |
| 02 기본 자료구조 |
5 |
05_스택과_큐 |
list vs deque, 괄호 매칭, 후위표기 |
| 02 기본 자료구조 |
6 |
06_해시 |
dict, set, Counter, 해시 충돌 개념 |
| 02 기본 자료구조 |
7 |
07_힙과_우선순위큐 |
heapq, 최소/최대 힙, Top-K |
| 02 기본 자료구조 |
8 |
08_연결_리스트 |
단일·이중·원형 연결 리스트 직접 구현 |
| 03 정렬·탐색 |
9 |
09_정렬_알고리즘 |
버블·삽입·병합·퀵 — 구현과 성능 비교 |
| 03 정렬·탐색 |
10 |
10_파이썬_정렬_활용 |
sorted/sort, key, 다중 키, 안정 정렬 |
| 03 정렬·탐색 |
11 |
11_이진_탐색 |
직접 구현 + bisect, lower/upper bound |
| 03 정렬·탐색 |
12 |
12_매개변수_탐색 |
Parametric Search, "되는 최댓값" 패턴 |
| 04 그래프 기초 |
13 |
13_그래프_표현 |
인접 리스트/행렬, 방향/무방향/가중치 |
| 04 그래프 기초 |
14 |
14_DFS |
재귀·스택 DFS, 방문 처리, 연결 요소 |
| 04 그래프 기초 |
15 |
15_BFS |
deque BFS, 최단 거리, 격자 탐색 |
| 04 그래프 기초 |
16 |
16_위상_정렬 |
Kahn(BFS)·DFS 위상 정렬, 사이클 탐지 |
| 05 트리 |
17 |
17_트리_순회 |
전·중·후위·레벨, 재귀 vs 반복 |
| 05 트리 |
18 |
18_이진_탐색_트리 |
BST 삽입/탐색/삭제, 균형 개념 |
| 05 트리 |
19 |
19_트라이 |
문자열 검색, 자동완성, 접두사 |
| 06 DP·그리디 |
20 |
20_DP_기초 |
메모이제이션·타뷸레이션, 피보나치·계단 |
| 06 DP·그리디 |
21 |
21_DP_심화 |
LCS, LIS, 0/1 배낭, 행렬 곱셈 |
| 06 DP·그리디 |
22 |
22_그리디 |
회의실 배정, 동전, 활동 선택, 증명 |
| 06 DP·그리디 |
23 |
23_분할_정복 |
병합·퀵·고속 거듭제곱·CCW |
| 07 고급 그래프 |
24 |
24_다익스트라 |
우선순위 큐 기반, 음수 가중치 한계 |
| 07 고급 그래프 |
25 |
25_플로이드_워셜 |
DP 관점, 모든 쌍 최단 경로 |
| 07 고급 그래프 |
26 |
26_최소_신장_트리 |
Kruskal(유니온 파인드)·Prim |
| 08 응용 |
27 |
27_실전_패턴 |
투 포인터·슬라이딩 윈도우·비트마스킹·구간 합 |
1주차 : 단원 01 ~ 02 (시간복잡도, 파이썬 입출력)
2주차 : 단원 03 ~ 04 (자료형 복잡도, 배열과 문자열)
3주차 : 단원 05 ~ 06 (스택과 큐, 해시)
4주차 : 단원 07 ~ 08 (힙, 연결 리스트)
5주차 : 단원 09 ~ 10 (정렬 알고리즘, 파이썬 정렬)
6주차 : 단원 11 ~ 12 (이진 탐색, 매개변수 탐색)
7주차 : 단원 13 ~ 15 (그래프 표현, DFS, BFS)
8주차 : 단원 16 ~ 17 (위상 정렬, 트리 순회)
9주차 : 단원 18 ~ 19 (BST, 트라이)
10주차 : 단원 20 ~ 22 (DP 기초·심화, 그리디)
11주차 : 단원 23 ~ 26 (분할 정복, 다익스트라, 플로이드, MST)
12주차 : 단원 27 + 전체 복습 + 모의 코딩 테스트
권장: 1주 2~3단원, 12주 완주 목표.
각 단원은 개념 → 예제(src/) → 과제(homework/) 순서로 학습하고,
과제를 직접 풀어 본 뒤 answer/ 폴더 정답과 비교하세요.
# 단원 이동 후 예제 실행
cd 01_기초/01_시간복잡도/src
python 01_big_o_demo.py
# 과제 정답 확인
cd 01_기초/01_시간복잡도/homework/answer
python boj_1546.py
| 번호 |
제목 |
난이도 |
| 15552 |
빠른 A+B |
Silver V |
| 1546 |
평균 |
Silver V |
| 10989 |
수 정렬하기 3 |
Silver V |
| 1927 |
최소 힙 |
Silver II |
| 11279 |
최대 힙 |
Silver II |
| 번호 |
제목 |
난이도 |
| 9012 |
괄호 |
Silver IV |
| 1764 |
듣보잡 |
Silver IV |
| 11286 |
절댓값 힙 |
Silver I |
| 1406 |
에디터 |
Gold V |
| 5397 |
키로거 |
Gold V |
| 번호 |
제목 |
난이도 |
| 2751 |
수 정렬하기 2 |
Silver V |
| 1181 |
단어 정렬 |
Silver V |
| 1920 |
수 찾기 |
Silver IV |
| 18870 |
좌표 압축 |
Silver II |
| 2110 |
공유기 설치 |
Gold IV |
| 번호 |
제목 |
난이도 |
| 1260 |
DFS와 BFS |
Silver II |
| 2667 |
단지번호붙이기 |
Silver I |
| 2178 |
미로 탐색 |
Silver I |
| 7576 |
토마토 |
Gold V |
| 2252 |
줄 세우기 |
Gold III |
| 번호 |
제목 |
난이도 |
| 1991 |
트리 순회 |
Silver I |
| 11725 |
트리의 부모 찾기 |
Silver II |
| 5639 |
이진 검색 트리 |
Gold V |
| 14425 |
문자열 집합 |
Silver III |
| 5052 |
전화번호 목록 |
Gold IV |
| 번호 |
제목 |
난이도 |
| 2579 |
계단 오르기 |
Silver III |
| 9251 |
LCS |
Gold V |
| 11053 |
가장 긴 증가하는 부분 수열 |
Silver II |
| 12865 |
평범한 배낭 |
Gold V |
| 1931 |
회의실 배정 |
Silver I |
| 번호 |
제목 |
난이도 |
| 1753 |
최단경로 |
Gold IV |
| 11404 |
플로이드 |
Gold IV |
| 1197 |
최소 스패닝 트리 |
Gold IV |
| 1238 |
파티 |
Gold III |
| 4386 |
별자리 만들기 |
Gold III |
| 번호 |
제목 |
난이도 |
| 2003 |
수들의 합 2 |
Silver IV |
| 11659 |
구간 합 구하기 4 |
Silver III |
| 11003 |
최솟값 찾기 |
Platinum V |
| 2098 |
외판원 순회 |
Gold I |
| 1644 |
소수의 연속합 |
Gold III |
| 알고리즘 |
시간 복잡도 |
공간 복잡도 |
단원 |
| 선형 탐색 |
O(n) |
O(1) |
04 |
| 이진 탐색 |
O(log n) |
O(1) |
11 |
| 버블/삽입 정렬 |
O(n²) |
O(1) |
09 |
| 병합 정렬 |
O(n log n) |
O(n) |
09 |
| 퀵 정렬 (평균) |
O(n log n) |
O(log n) |
09 |
| BFS / DFS |
O(V+E) |
O(V) |
14, 15 |
| 위상 정렬 (Kahn) |
O(V+E) |
O(V+E) |
16 |
| 다익스트라 (heapq) |
O((V+E) log V) |
O(V+E) |
24 |
| 플로이드-워셜 |
O(V³) |
O(V²) |
25 |
| 크루스칼 MST |
O(E log E) |
O(V+E) |
26 |
| 프림 MST (heapq) |
O((V+E) log V) |
O(V+E) |
26 |
| Union-Find |
O(α(V)) per op |
O(V) |
26 |
| 1D 구간 합 |
O(n) 전처리, O(1) 쿼리 |
O(n) |
27 |
| 비트마스크 TSP |
O(2ⁿ · n²) |
O(2ⁿ · n) |
27 |
| LCS |
O(nm) |
O(nm) |
21 |
| LIS (이진탐색) |
O(n log n) |
O(n) |
21 |
| 0/1 배낭 |
O(nW) |
O(W) |
21 |
제출 전 확인 사항:
□ 시간 복잡도가 제한 안에 드는가? (1초 ≈ 10⁸ 연산)
□ 메모리 사용량은 256MB 이하인가?
□ 입력 크기 최솟값/최댓값 경계를 테스트했는가?
□ 0-indexed vs 1-indexed 혼동이 없는가?
□ 재귀 사용 시 sys.setrecursionlimit(10**6) 추가했는가?
□ 입력 속도를 위해 sys.stdin.readline 사용했는가?
□ 출력이 많을 때 '\n'.join() 또는 sys.stdout.write 사용했는가?
□ INF = float('inf') 또는 INF = 10**18 로 설정했는가?
MIT License — 자유롭게 사용·수정·배포 가능합니다. 출처 표기를 권장합니다.