Skip to content

cflab2017/Lecture_Algorithm_Python

Repository files navigation

파이썬 알고리즘 & 자료구조 강의

🌐 전체 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_실전_패턴/                      투 포인터·슬라이딩 윈도우·비트마스킹·구간 합

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

백준 워크북: Part별 추천 문제

Part 01 — 기초

번호 제목 난이도
15552 빠른 A+B Silver V
1546 평균 Silver V
10989 수 정렬하기 3 Silver V
1927 최소 힙 Silver II
11279 최대 힙 Silver II

Part 02 — 기본 자료구조

번호 제목 난이도
9012 괄호 Silver IV
1764 듣보잡 Silver IV
11286 절댓값 힙 Silver I
1406 에디터 Gold V
5397 키로거 Gold V

Part 03 — 정렬·탐색

번호 제목 난이도
2751 수 정렬하기 2 Silver V
1181 단어 정렬 Silver V
1920 수 찾기 Silver IV
18870 좌표 압축 Silver II
2110 공유기 설치 Gold IV

Part 04 — 그래프 기초

번호 제목 난이도
1260 DFS와 BFS Silver II
2667 단지번호붙이기 Silver I
2178 미로 탐색 Silver I
7576 토마토 Gold V
2252 줄 세우기 Gold III

Part 05 — 트리

번호 제목 난이도
1991 트리 순회 Silver I
11725 트리의 부모 찾기 Silver II
5639 이진 검색 트리 Gold V
14425 문자열 집합 Silver III
5052 전화번호 목록 Gold IV

Part 06 — DP·그리디

번호 제목 난이도
2579 계단 오르기 Silver III
9251 LCS Gold V
11053 가장 긴 증가하는 부분 수열 Silver II
12865 평범한 배낭 Gold V
1931 회의실 배정 Silver I

Part 07 — 고급 그래프

번호 제목 난이도
1753 최단경로 Gold IV
11404 플로이드 Gold IV
1197 최소 스패닝 트리 Gold IV
1238 파티 Gold III
4386 별자리 만들기 Gold III

Part 08 — 응용 패턴

번호 제목 난이도
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 — 자유롭게 사용·수정·배포 가능합니다. 출처 표기를 권장합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages