Skip to content
LEEJaeHyeok97Public

About

리트코드 70문제

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

LeetCode 70 — 사고 과정을 남기는 코딩 테스트 저장소

정답 코드를 모으는 저장소가 아니다. 정답은 시간이 지나면 잊는다. 남는 건 '어떤 신호를 보고 어떤 도구를 꺼냈는가' 뿐이라서, 노트의 무게중심을 코드가 아니라 접근을 고른 과정 · 막혔던 지점 · 뚫은 방법에 두었다.

문제 하나를 푸는 루틴

단계 하는 일 시간
1. 이해 문제를 내 말로 노트에 다시 쓴다. 입력·출력·제약·엣지 케이스. 여기서 못 쓰면 아직 이해 못 한 것 5분
2. 설계 코드 치기 전에 브루트포스부터 적고, 제약 조건으로 통과 여부를 따진다. 그다음 최적화 아이디어와 왜 맞는지 10분
3. 구현 설계한 대로만 옮긴다. 여기서 새 아이디어가 튀어나오면 2단계로 돌아간다 15분
4. 검증 제출 전에 엣지 케이스를 손으로 넣어본다. 복잡도를 입으로 말해본다 5분
5. 기록 막혔던 지점을 반드시 구체적으로. "어려웠다" ❌ / "회전 배열에서 어느 쪽이 정렬되었는지 판별하는 조건을 못 세워 20분" ⭕ 10분

막힐 때 규칙 — 25분

  • ~25분: 혼자 붙든다. 예제를 손으로 그린다.
  • 25~40분: 힌트/태그만 본다. 해설 코드는 아직 안 본다.
  • 40분 초과: 강의·해설을 본다. 대신 노트 5번 항목에 "내가 스스로 못 떠올린 결정적 한 수" 를 반드시 한 줄로 적는다. 이 한 줄이 다음 문제에서 쓰인다.
  • 해설을 봤으면 창을 닫고 빈 화면에서 다시 구현한다. 읽어서 아는 것과 쓸 수 있는 것은 다르다.

복습 규칙 (3회독)

회차 시점 목표
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. 문자열 (String)

문자열은 어떤 자료구조로 바꿔서 볼 것인가가 승부처다.

# 문제 난이도 노트 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 📝 ⬜ ⬜ ⬜

2. 배열 (Array)

배열 문제는 정렬되어 있는가와 추가 공간을 써도 되는가를 먼저 확인한다.

# 문제 난이도 노트 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 📝 ⬜ ⬜ ⬜

3. 행렬 (Matrix)

행렬은 방향 벡터와 방문 처리를 손에 익히는 단원이다.

# 문제 난이도 노트 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 📝 ⬜ ⬜ ⬜

4. 링크드 리스트 (Linked List)

링크드 리스트는 더미 노드와 두 포인터면 대부분 정리된다.

# 문제 난이도 노트 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 📝 ⬜ ⬜ ⬜

5. 구간 (Interval)

구간 문제의 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 📝 ⬜ ⬜ ⬜

6. 동적 프로그래밍 (Dynamic Programming)

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 📝 ⬜ ⬜ ⬜

7. 트리 (Tree)

트리는 재귀 함수가 무엇을 반환하는지를 한 문장으로 정의하면 끝난다.

# 문제 난이도 노트 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 📝 ⬜ ⬜ ⬜

8. 그래프 (Graph)

그래프는 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 📝 ⬜ ⬜ ⬜

9. 힙 (Heap)

힙은 전체 정렬이 필요 없을 때 쓰는 도구다.

# 문제 난이도 노트 1회독 2회독 3회독 내가 붙인 패턴
1 347. Top K Frequent Elements Medium 📝 ⬜ ⬜ ⬜
2 23. Merge k Sorted Lists Hard 📝 ⬜ ⬜ ⬜

10. 비트 조작 (Bit Manipulation)

비트 연산은 외워야 실전에서 나온다. 관용구 단위로 익힌다.

# 문제 난이도 노트 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 만 훑어도 약점이 보인다.

About

리트코드 70문제

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors