정답 코드를 모으는 저장소가 아니다. 정답은 시간이 지나면 잊는다. 남는 건 '어떤 신호를 보고 어떤 도구를 꺼냈는가' 뿐이라서, 노트의 무게중심을 코드가 아니라 접근을 고른 과정 · 막혔던 지점 · 뚫은 방법에 두었다.
| 단계 | 하는 일 | 시간 |
|---|---|---|
| 1. 이해 | 문제를 내 말로 노트에 다시 쓴다. 입력·출력·제약·엣지 케이스. 여기서 못 쓰면 아직 이해 못 한 것 | 5분 |
| 2. 설계 | 코드 치기 전에 브루트포스부터 적고, 제약 조건으로 통과 여부를 따진다. 그다음 최적화 아이디어와 왜 맞는지 | 10분 |
| 3. 구현 | 설계한 대로만 옮긴다. 여기서 새 아이디어가 튀어나오면 2단계로 돌아간다 | 15분 |
| 4. 검증 | 제출 전에 엣지 케이스를 손으로 넣어본다. 복잡도를 입으로 말해본다 | 5분 |
| 5. 기록 | 막혔던 지점을 반드시 구체적으로. "어려웠다" ❌ / "회전 배열에서 어느 쪽이 정렬되었는지 판별하는 조건을 못 세워 20분" ⭕ | 10분 |
막힐 때 규칙 — 25분
- ~25분: 혼자 붙든다. 예제를 손으로 그린다.
- 25~40분: 힌트/태그만 본다. 해설 코드는 아직 안 본다.
- 40분 초과: 강의·해설을 본다. 대신 노트 5번 항목에 "내가 스스로 못 떠올린 결정적 한 수" 를 반드시 한 줄로 적는다. 이 한 줄이 다음 문제에서 쓰인다.
- 해설을 봤으면 창을 닫고 빈 화면에서 다시 구현한다. 읽어서 아는 것과 쓸 수 있는 것은 다르다.
| 회차 | 시점 | 목표 |
|---|---|---|
| 1회독 | 처음 | 맞히는 것 자체 |
| 2회독 | 3~7일 뒤 | 해설 없이, 접근을 설명하면서 푼다 |
| 3회독 | 3~4주 뒤 | 15분 안에 막힘 없이 |
각 회차마다 노트 상단의 풀이 기록 표에 날짜 · 소요 시간 · 자력 여부를 적는다.
자력 ❌가 두 번 이상 찍힌 문제가 진짜 약점이니 그것만 따로 모아 다시 돈다.
풀었으면 ⬜ → ✅ 로 바꾼다. 난이도 옆의 🔒 는 LeetCode Premium 전용 문제(271, 252, 253, 261, 323)로, 구독이 없으면 LintCode나 NeetCode에서 같은 문제를 풀 수 있다.
| 단원 | 문제 수 | 진도 |
|---|---|---|
| 1. 문자열 (String) | 8 | 0 / 8 |
| 2. 배열 (Array) | 15 | 0 / 15 |
| 3. 행렬 (Matrix) | 5 | 0 / 5 |
| 4. 링크드 리스트 (Linked List) | 5 | 0 / 5 |
| 5. 구간 (Interval) | 4 | 0 / 4 |
| 6. 동적 프로그래밍 (Dynamic Programming) | 11 | 0 / 11 |
| 7. 트리 (Tree) | 10 | 0 / 10 |
| 8. 그래프 (Graph) | 6 | 0 / 6 |
| 9. 힙 (Heap) | 2 | 0 / 2 |
| 10. 비트 조작 (Bit Manipulation) | 4 | 0 / 4 |
| 합계 | 70 | 0 / 70 |
문자열은 어떤 자료구조로 바꿔서 볼 것인가가 승부처다.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 125. Valid Palindrome | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 242. Valid Anagram | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 3 | 49. Group Anagrams | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 4 | 271. Encode and Decode Strings | Medium 🔒 | 📝 | ⬜ | ⬜ | ⬜ | |
| 5 | 20. Valid Parentheses | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 6 | 5. Longest Palindromic Substring | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 7 | 22. Generate Parentheses | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 8 | 46. Permutations | Medium | 📝 | ⬜ | ⬜ | ⬜ |
배열 문제는 정렬되어 있는가와 추가 공간을 써도 되는가를 먼저 확인한다.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 217. Contains Duplicate | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 1. Two Sum | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 3 | 167. Two Sum II - Input Array Is Sorted | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 4 | 283. Move Zeroes | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 5 | 121. Best Time to Buy and Sell Stock | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 6 | 153. Find Minimum in Rotated Sorted Array | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 7 | 238. Product of Array Except Self | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 8 | 41. First Missing Positive | Hard | 📝 | ⬜ | ⬜ | ⬜ | |
| 9 | 31. Next Permutation | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 10 | 704. Binary Search | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 11 | 33. Search in Rotated Sorted Array | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 12 | 11. Container With Most Water | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 13 | 15. 3Sum | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 14 | 215. Kth Largest Element in an Array | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 15 | 204. Count Primes | Medium | 📝 | ⬜ | ⬜ | ⬜ |
행렬은 방향 벡터와 방문 처리를 손에 익히는 단원이다.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 542. 01 Matrix | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 54. Spiral Matrix | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 3 | 48. Rotate Image | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 4 | 73. Set Matrix Zeroes | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 5 | 79. Word Search | Medium | 📝 | ⬜ | ⬜ | ⬜ |
링크드 리스트는 더미 노드와 두 포인터면 대부분 정리된다.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 2. Add Two Numbers | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 21. Merge Two Sorted Lists | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 3 | 206. Reverse Linked List | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 4 | 141. Linked List Cycle | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 5 | 19. Remove Nth Node From End of List | Medium | 📝 | ⬜ | ⬜ | ⬜ |
구간 문제의 9할은 무엇을 기준으로 정렬하느냐에서 갈린다.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 56. Merge Intervals | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 252. Meeting Rooms | Easy 🔒 | 📝 | ⬜ | ⬜ | ⬜ | |
| 3 | 253. Meeting Rooms II | Medium 🔒 | 📝 | ⬜ | ⬜ | ⬜ | |
| 4 | 435. Non-overlapping Intervals | Medium | 📝 | ⬜ | ⬜ | ⬜ |
DP는 상태 정의 → 점화식 → 초기값 → 순회 순서 네 줄을 먼저 쓰고 코딩한다.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 70. Climbing Stairs | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 198. House Robber | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 3 | 53. Maximum Subarray | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 4 | 152. Maximum Product Subarray | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 5 | 3. Longest Substring Without Repeating Characters | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 6 | 91. Decode Ways | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 7 | 139. Word Break | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 8 | 62. Unique Paths | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 9 | 39. Combination Sum | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 10 | 322. Coin Change | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 11 | 1143. Longest Common Subsequence | Medium | 📝 | ⬜ | ⬜ | ⬜ |
트리는 재귀 함수가 무엇을 반환하는지를 한 문장으로 정의하면 끝난다.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 100. Same Tree | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 104. Maximum Depth of Binary Tree | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 3 | 226. Invert Binary Tree | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 4 | 102. Binary Tree Level Order Traversal | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 5 | 572. Subtree of Another Tree | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 6 | 98. Validate Binary Search Tree | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 7 | 235. Lowest Common Ancestor of a Binary Search Tree | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 8 | 236. Lowest Common Ancestor of a Binary Tree | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 9 | 261. Graph Valid Tree | Medium 🔒 | 📝 | ⬜ | ⬜ | ⬜ | |
| 10 | 208. Implement Trie (Prefix Tree) | Medium | 📝 | ⬜ | ⬜ | ⬜ |
그래프는 BFS/DFS/유니온파인드/위상정렬 네 도구 중 무엇을 꺼낼지의 문제.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 200. Number of Islands | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 133. Clone Graph | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 3 | 323. Number of Connected Components in an Undirected Graph | Medium 🔒 | 📝 | ⬜ | ⬜ | ⬜ | |
| 4 | 207. Course Schedule | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 5 | 211. Design Add and Search Words Data Structure | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 6 | 128. Longest Consecutive Sequence | Medium | 📝 | ⬜ | ⬜ | ⬜ |
힙은 전체 정렬이 필요 없을 때 쓰는 도구다.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 347. Top K Frequent Elements | Medium | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 23. Merge k Sorted Lists | Hard | 📝 | ⬜ | ⬜ | ⬜ |
비트 연산은 외워야 실전에서 나온다. 관용구 단위로 익힌다.
| # | 문제 | 난이도 | 노트 | 1회독 | 2회독 | 3회독 | 내가 붙인 패턴 |
|---|---|---|---|---|---|---|---|
| 1 | 191. Number of 1 Bits | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 2 | 190. Reverse Bits | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 3 | 338. Counting Bits | Easy | 📝 | ⬜ | ⬜ | ⬜ | |
| 4 | 268. Missing Number | Easy | 📝 | ⬜ | ⬜ | ⬜ |
풀기 전에 이 표를 훑고, 푼 뒤에는 내가 쓴 도구가 여기 있는지 확인한다. 없으면 한 줄 추가한다.
| 문제 속 신호 | 꺼낼 도구 | 대표 문제 |
|---|---|---|
| "정렬된 배열" + 값 탐색 | 이분 탐색 | 704, 33, 153 |
| "정렬된 배열" + 두 수의 합/최대 넓이 | 투 포인터 | 167, 11, 15 |
| "존재하는가 / 몇 번 나오는가" | HashSet · HashMap | 217, 1, 242, 49 |
| "연속된 부분 배열·문자열의 최대/최소" | 슬라이딩 윈도우 | 3, 53 |
| "모든 경우의 수를 만들어라" | 백트래킹 | 46, 22, 39, 79 |
| "이전 계산 결과를 다시 쓴다" | DP (상태 정의부터) | 70, 198, 91, 139, 322 |
| "최단 거리 / 레벨 단위" | BFS | 102, 200, 542 |
| "연결되어 있는가 / 전부 순회" | DFS · Union-Find | 200, 323, 261 |
| "선수 과목 / 순서 / 사이클" | 위상 정렬 | 207 |
| "상위 K개" | 힙 (크기 K 유지) | 215, 347, 23 |
| "겹치는 구간" | 시작점 기준 정렬 후 스윕 | 56, 252, 253, 435 |
| "접두사 / 단어 사전" | Trie | 208, 211 |
| "O(1) 추가 공간" | 입력 배열 자체를 재활용 | 41, 73, 48, 238 |
| "정수의 비트 / 짝지어 사라짐" | 비트 연산 · XOR | 191, 190, 338, 268 |
| N 범위 | 노려야 할 복잡도 |
|---|---|
| N ≤ 10 | O(N!), O(2^N) — 완전탐색·백트래킹 |
| N ≤ 100 | O(N³) |
| N ≤ 1,000 | O(N²) |
| N ≤ 100,000 | O(N log N) — 정렬·힙·이분탐색 |
| N ≤ 1,000,000 | O(N), O(log N) |
제약 조건을 먼저 읽고 목표 복잡도를 정한 다음 알고리즘을 고르면, 틀린 방향으로 30분을 태우는 일이 줄어든다.
.
├── README.md ← 진도 대시보드 · 패턴 치트시트 (지금 이 파일)
├── TEMPLATE.md ← 새 문제 노트 템플릿
├── 01-string/
│ ├── README.md ← 단원별 도구 정리 + 문제 목록
│ ├── 0125-valid-palindrome.md
│ └── ...
├── 02-array/
└── ... (10개 단원)
노트 파일 하나에 문제 링크 · 풀이 기록 표 · 사고 과정 · Java 코드가 모두 들어 있다.
solve(array): 15. 3Sum — 정렬 후 투 포인터, 중복 스킵에서 20분 막힘
review(tree): 98. Validate BST — 2회독, 자력 12분
커밋 메시지에 어디서 막혔는지를 한 조각 남겨두면, 나중에 git log 만 훑어도 약점이 보인다.