TRENDSHIFT DEEP-DIVE · 2026.05.28 · #8

kamyu104/LeetCode-Solutions
3958문제의 알고리즘 사전

전 세계 코딩 인터뷰가 묻는 3958개 LeetCode 문제 전체를 Python·Modern C++로 풀어두고 매주 업데이트하는 레포지토리. 별 5.2k, 포크 1.7k, 커밋 2만 건이 넘는 8년차 정답지.

1프로젝트 한줄 요약

이 레포가 정확히 뭘 하는가.

kamyu104/LeetCode-Solutions는 LeetCode에 출제된 3958개 전 문제의 해답을 PythonModern C++로 정리해 놓은 단일 저장소입니다. 매주 새 문제가 추가될 때마다 풀이가 함께 올라오고, 모든 풀이 파일 첫 두 줄에는 시간복잡도와 공간복잡도가 명시되어 있어 그냥 베끼는 게 아니라 "왜 이게 최적인지"를 같이 학습할 수 있도록 설계되어 있습니다.

한 줄 요약

"매주 업데이트되는
알고리즘 교과서 + 정답지 하이브리드."

일반적인 LeetCode 풀이 모음과의 결정적 차이: 3958문제 전체를 다루고, 주 단위로 8년 넘게 유지보수되고 있으며, 풀이마다 Time: O(n) / Space: O(1)이 명시되어 있다는 점입니다.

용어
LeetCode
전 세계 개발자가 코딩 인터뷰를 준비하는 알고리즘 문제 풀이 사이트. Google·Meta·Microsoft·Amazon 같은 빅테크의 코딩 라운드에서 자주 등장하는 문제 유형이 모여 있어 "코딩 인터뷰의 수능 문제집" 같은 위치를 차지합니다.
용어
시간복잡도 / 공간복잡도 (Time / Space Complexity)
입력이 커질 때 알고리즘이 얼마나 느려지는지(시간), 얼마나 메모리를 먹는지(공간)를 표현하는 수학적 표기. O(n)은 입력 크기 n에 비례, O(log n)은 입력이 두 배가 돼도 한 단계만 더 걸린다는 뜻. 면접관이 "이게 최선인가?"라고 묻는 순간 답해야 하는 언어입니다.

2왜 주목받는가

TrendShift 8위에 오른 이유와 경쟁 레포 대비 강점.

LeetCode 풀이를 정리한 레포는 수천 개가 있습니다. 그중 이 레포가 "코딩 인터뷰 준비할 때 가장 먼저 떠올리는 이름" 중 하나가 된 데에는 몇 가지 분명한 이유가 있습니다.

차별점 1

3958/3958 — 진짜로 다 풀려 있다

비슷한 컨셉의 레포들 대부분은 "Easy 위주", "면접 빈출 75제", "Top 100"으로 출발해서 흐지부지됩니다. 이 레포는 전체 문제를 다 풀어두고 매주 새 문제까지 따라잡는 진행률 100% 상태를 유지하고 있습니다. README의 progress-3958/3958 배지가 그 증거입니다.

차별점 2

주 단위 8년+ 업데이트

커밋 수 20,259건. 단순한 풀이 모음이 아니라 매주 LeetCode가 새 콘테스트 문제를 내면 며칠 안에 풀이가 올라오는 "살아 있는" 레포입니다. README 배지에도 update-weekly가 있고, 실제로 master 브랜치는 한 주도 빠지지 않고 변경됩니다.

차별점 3

Time/Space 복잡도가 모든 파일 상단에

대부분의 레포는 풀이 코드만 던지지만, 여기는 모든 파일이 두 줄짜리 주석으로 시작합니다 — // Time: O(n) / // Space: O(n). 한 줄짜리 풀이라도 "이 풀이가 왜 최적인지"를 학습자가 즉시 확인할 수 있습니다.

차별점 4

Python ↔ C++ 1:1 대응

거의 모든 문제가 Python 버전과 C++ 버전을 동시에 제공합니다. 같은 알고리즘을 두 언어로 어떻게 표현하는지를 비교하면서 학습할 수 있고, 면접에서 어느 언어를 선택해도 참고 자료가 됩니다. 보조적으로 Java·Go·Rust·Swift·Kotlin·TypeScript 등 11개 언어 디렉토리도 존재합니다.

차별점 5

알고리즘 카테고리별로 인덱싱

README는 단순한 번호 나열이 아니라 25개 알고리즘 카테고리(Array, DP, Graph, Trie, Bit Manipulation, …)별로 문제가 분류되어 있고, 각 행에 Difficulty·Tag·Note까지 있어 "DP만 집중적으로 풀어볼래" 같은 학습이 가능합니다.

한계 / 솔직한 평가
"풀이"만 있고 "설명"은 거의 없다

풀이 파일에 알고리즘 설명·풀이 과정 주석은 거의 없습니다. 시간·공간 복잡도와 사용한 자료구조 태그가 전부. 따라서 해당 알고리즘을 이미 한 번은 본 사람이 "정답 코드를 빠르게 확인"하는 용도로 가장 강하고, 처음 배우는 사람은 LeetCode 본문이나 별도 알고리즘 책과 병행해야 합니다.

3기술 스택 전체 지도

백엔드·프론트엔드라기보다 "언어 + 카테고리 매트릭스"로 봐야 한다.

이 레포는 일반적인 웹 서비스가 아니라 "풀이 코드의 모음집"입니다. 따라서 기술 스택은 다음 세 축으로 구성됩니다.

축 1 · 프로그래밍 언어 (14종)

주력은 PythonModern C++(C++17 이상의 모던 기능을 적극 사용)입니다. 나머지 언어는 일부 문제 중심으로 채워져 있습니다.

용어
Modern C++ (모던 C++)
C++11 / C++14 / C++17 / C++20에서 도입된 새 기능을 적극 활용하는 스타일. auto 자동 타입 추론, unordered_map(해시맵), vector의 균일 초기화 {...}, 람다 [](...){ ... } 같은 문법을 자유롭게 씁니다. 옛날 C++(typedef, NULL, raw pointer)와는 코드 모양이 꽤 다릅니다.

축 2 · 알고리즘 카테고리 (25개 + α)

README에 노출된 25개 알고리즘 카테고리. 각 문제는 하나 이상의 카테고리에 매핑됩니다.

자료구조 계열

Array · String · Linked List · Stack · Queue · Binary Heap · Tree · Hash Table · Binary Search Tree

탐색·정렬 계열

Two Pointers · Binary Search · BFS · DFS · Backtracking · Sort · Recursion

최적화 알고리즘

Dynamic Programming · Greedy · Math · Bit Manipulation · Geometry

고급 / 응용

Graph · Simulation · Constructive Algorithms · Design (LRU Cache 등)

여기에 JavaScript(JS 문제), SQL(데이터베이스 문제), Pandas(데이터 분석 문제) 카테고리가 별도로 존재합니다.

축 3 · 인프라 (의외로 단순)

이 레포는 빌드도, 패키지 매니저도, 디펜던시도 없습니다. 인프라 측면에서 유일한 자동화는 다음과 같습니다.

CI

Travis CI (.travis.yml)

풀이가 적어도 컴파일·인터프리트가 되는지 확인하는 가벼운 CI(Continuous Integration, 지속적 통합) 설정이 있을 뿐. 문제마다 LeetCode 채점기를 호출하는 식의 자동 채점은 아닙니다 — 이는 LeetCode가 닫힌 채점 시스템이라 외부에서 자동화하기 어렵습니다.

라이선스 · 배지

MIT License · Visitor Badge · Saythanks

MIT 라이선스라 학습·인용·포크·재배포가 자유. README 상단에는 진행률 / 업데이트 주기 / 방문자 수 / Saythanks 링크 등 사회적 신호 배지들이 붙어 있어 한눈에 활성도를 알 수 있게 했습니다.

4아키텍처 심화 분석

"풀이의 표준 형식"이라는 작은 설계 결정이 만든 일관성.

이 레포의 "아키텍처"는 시스템 다이어그램이 아닌, 풀이 파일 한 개의 형식으로 정의됩니다. 8년간 2만 건의 커밋이 무너지지 않은 이유는 이 작은 규칙 덕분입니다.

비유

레고 박스를 생각해 보세요. 어떤 블록이 들어 있어도 박스 한 칸의 규격은 같습니다. 이 레포의 풀이 파일들도 그렇습니다. "파일 첫 줄은 시간복잡도, 둘째 줄은 공간복잡도, 셋째 줄은 빈 줄, 그 뒤에 풀이"라는 규격을 정해두니, 3958개를 일관되게 유지할 수 있게 됩니다.

풀이 파일 표준 구조 (Python 기준)

# Time: O(n) # Space: O(n) class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ lookup = {} for i, num in enumerate(nums): if target - num in lookup: return [lookup[target - num], i] lookup[num] = i

같은 문제의 C++ 버전도 첫 두 줄이 시간·공간 복잡도라는 규칙이 똑같이 지켜집니다.

// Time: O(n) // Space: O(n) class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> lookup; for (int i = 0; i < nums.size(); ++i) { if (lookup.count(target - nums[i])) { return {lookup[target - nums[i]], i}; } lookup[nums[i]] = i; } return {}; } };

저장소 구조도 (ASCII)

LeetCode-Solutions/ ├── 0001-1000.md ← 1번 ~ 1000번 문제 인덱스 (마크다운 표) ├── 1001-2000.md ← 1001번 ~ 2000번 ├── 2001-3000.md ← 2001번 ~ 3000번 ├── README.md ← 3001번 ~ 최신 + 카테고리별 진입 표 ├── REFERENCE.md ← 외부 참고 자료 링크 모음 ├── CONTRIBUTING.md ← 기여 가이드 ├── LICENSE.md ← MIT ├── .travis.yml ← CI │ ├── Python/ ← Python 2 문법 풀이 (legacy) │ ├── two-sum.py │ ├── ... │ └── (수천 개 파일) ├── Python3/ ← Python 3 전용 문법 필요한 풀이 ├── C++/ ← Modern C++ 풀이 (주력) ├── Java/, Golang/, Rust/, TypeScript/, Swift/, ├── Kotlin/, C#/, PHP/, Ruby/, Shell/ ├── MySQL/ ← Database 카테고리 SQL 풀이 └── (Pandas 풀이는 Python3/ 안에 포함)

설계 패턴 1 · 파일명 = URL slug

모든 풀이 파일명은 LeetCode 문제 페이지의 슬러그(URL의 마지막 부분)와 동일합니다. 예: 문제 1. Two Sum의 URL이 leetcode.com/problems/two-sum이면 풀이는 two-sum.py / two-sum.cpp. 덕분에 문제 URL만 보면 풀이 파일을 즉시 찾아낼 수 있고, README의 표가 외부에서 깨질 일이 없습니다.

설계 패턴 2 · 카테고리 다중 태깅

한 문제는 여러 알고리즘 카테고리에 동시에 등장합니다. 예를 들어 "Subarrays with XOR at Least K" 문제는 README의 Bit Manipulation 표에 등장하면서 동시에 Prefix Sum·Trie 표에도 들어갑니다. 학습자가 어느 카테고리를 공부 중이든 그 안에서 자연스럽게 발견할 수 있도록 한 의도적 중복입니다.

설계 패턴 3 · README의 1000개 단위 샤딩

3958개 문제를 단일 README에 넣으면 GitHub 페이지가 렌더링되지 않습니다. 그래서 0001-1000.md, 1001-2000.md, 2001-3000.md, 그리고 메인 README.md(3001 이후 + 카테고리 인덱스)로 1000문제씩 샤딩해 분할 로딩합니다. 데이터베이스 샤딩과 동일한 발상을 마크다운에 적용한 셈입니다.

용어
샤딩 (Sharding)
너무 커진 데이터·파일을 일정 기준으로 잘라 여러 조각으로 나누는 기법. 원래는 대규모 데이터베이스에서 테이블을 쪼개는 용어지만, 큰 마크다운을 1000개 단위로 자른 이 레포의 README도 본질적으로 같은 발상입니다.

5디렉토리 구조 해부

루트의 파일·폴더 하나하나가 어떤 역할을 하는가.

루트 마크다운 (4개)

README.md · 0001-1000.md · 1001-2000.md · 2001-3000.md

이 4개 파일이 사실상 사이트의 메인 페이지입니다. 표 형식으로 #(문제 번호) · Title(원본 링크) · Solution(C++/Python 풀이 링크) · Time · Space · Difficulty · Tag · Note가 들어 있습니다. README.md는 3001번 이후 새 문제 + 카테고리별 알고리즘 인덱스 두 가지 역할을 겸합니다.

언어별 디렉토리 (14개)

Python/ · Python3/ · C++/ · Java/ · Golang/ · …

각 언어별로 풀이 파일들이 평탄하게 펼쳐져 있습니다. 중첩 폴더 없음 — 한 디렉토리 안에 수천 개 파일이 직접 들어 있는 단순 구조입니다. 검색은 README의 표에서 카테고리·번호로, 직접 접근은 파일명(URL slug)으로 하는 것이 정상 동선입니다.

왜 Python과 Python3가 따로? — Python 2 시절부터 시작된 레포라 옛 풀이가 Python/에 남아 있고, Python 3에서만 동작하는 문법(예: walrus operator, type hint)을 쓴 새 풀이가 Python3/에 들어갑니다.
메타 문서

REFERENCE.md · CONTRIBUTING.md · LICENSE.md

REFERENCE.md는 풀이에 자주 등장하는 자료구조·알고리즘의 외부 설명 링크 모음(위키피디아·CP 사이트 등). CONTRIBUTING.md는 PR을 보낼 때 따라야 할 풀이 양식(시간·공간 복잡도 주석, 파일명 규칙) 가이드. LICENSE.md는 MIT.

자동화

.travis.yml

매우 가벼운 CI 설정 — 변경된 풀이 파일이 컴파일·인터프리트 단계에서 깨지지 않는지를 확인하는 정도. LeetCode 채점기와 직접 통신하는 자동 채점은 아닙니다(LeetCode는 공식 외부 API를 닫아 두었습니다).

6학습 포인트 (기술별)

이 레포를 펴고 "무엇을 어떻게 보면 가장 많이 배울까".

학습 포인트 1 · 같은 문제의 Python ↔ C++ 비교

이 레포에서 가장 강력한 학습 무기는 "같은 알고리즘을 두 언어로 어떻게 표현하는지" 비교입니다. 위 4번 섹션의 two-sum.py / two-sum.cpp를 다시 보면, 같은 해시맵 알고리즘인데도 다음과 같은 차이가 드러납니다.

이 작은 비교 하나만으로도 "왜 면접관이 두 언어 다 해본 사람을 좋아하는지"가 체감됩니다.

학습 포인트 2 · 시간·공간 복잡도 읽는 습관

파일을 열 때 첫 두 줄을 가리고 풀이를 본 뒤, 본인이 추정한 복잡도와 비교하는 습관을 들이면, 자연스럽게 "이 패턴은 O(n log n)이구나" 같은 직관이 쌓입니다.

비유

수학 문제집 정답지를 볼 때 "최종 답"만 가리고 풀이를 보면 사고 흐름이 남는 것처럼, 여기선 "복잡도"를 가리고 코드를 본 뒤 맞추는 게 같은 효과를 줍니다.

학습 포인트 3 · 카테고리 인덱스를 학습 커리큘럼처럼 쓰기

README의 25개 카테고리는 그 자체로 알고리즘 학습 로드맵입니다. "오늘은 Two Pointers만 10문제 풀어본다" 같은 식으로 카테고리 단위 집중 학습이 가능합니다. 각 카테고리 표는 난이도(Easy / Medium / Hard)가 섞여 있어 "쉬운 것부터 어려운 것"으로 진행하기에도 편합니다.

학습 포인트 4 · Modern C++ 입문

C++을 학교에서만 배운 사람이라면 "Modern C++이 진짜 어떻게 생겼는지"를 짧은 단위로 익히기 좋습니다.

Modern C++ 자주 보게 되는 패턴

학습 포인트 5 · 카테고리별 자료구조 라이브러리 학습

고난이도 문제에서 등장하는 자료구조를 카테고리에서 자연스럽게 마주칩니다 — BIT(Binary Indexed Tree, Fenwick Tree), Segment Tree, Trie, Union-Find, Monotonic Stack/Queue 등. 이 레포의 표 Note 컬럼은 해당 문제가 어떤 자료구조·알고리즘을 쓰는지 명시해 두기 때문에, "BIT 처음 배울 때 어떤 문제를 풀어보면 좋을까?"의 답을 카테고리 표만 보고 추릴 수 있습니다.

7하드웨어/시스템 요구사항

"실행"이라는 단계가 거의 없는 레포라 진입장벽도 낮다.

일반적인 오픈소스 레포는 Docker나 빌드 도구가 필요하지만, 이 레포는 "풀이 파일을 읽고 본인 환경에서 따라치는" 형태라 시스템 요구사항이 매우 가볍습니다.

최소 환경 (읽기만)

웹 브라우저 + GitHub

브라우저로 GitHub에서 풀이를 보는 것만으로도 학습이 가능합니다. 아무것도 설치할 필요 없음.

실습 환경 (직접 풀이)

Python 3.8+ 또는 C++17+ 컴파일러

Python은 3.8 이상이면 대부분의 풀이가 그대로 실행됩니다. C++은 g++ / clang++에서 -std=c++17 이상 옵션이 필요합니다.

LeetCode 채점

LeetCode 계정 (무료)

풀이를 검증하려면 LeetCode 사이트에 그대로 붙여넣어 제출. Premium은 필수 아님 — 단, README의 🔒 표시 문제는 Premium 구독자만 LeetCode 본문을 볼 수 있습니다(풀이 코드는 자유 열람).

디스크 공간

약 500MB (전체 클론 기준)

2만 건의 커밋 + 수만 개의 풀이 파일을 포함한 git history 때문에 클론 크기가 꽤 됩니다. 필요한 언어 폴더만 sparse-checkout 하면 더 줄일 수 있습니다.

로컬에 굳이 클론하지 말 것

대부분의 사용 패턴은 "GitHub 검색 → 특정 풀이 파일 열람"입니다. 클론하면 500MB가 디스크에서 의미 없이 자리만 차지하니, 북마크 + GitHub 검색이 더 가볍습니다. 정 필요하면 git clone --depth=1로 최신 스냅샷만 받으면 50MB 이하로 줄어듭니다.

8직접 해볼 수 있는 실습 과제

난이도별 5단계. 본인 수준에 맞게 시작점을 골라보세요.

난이도 ★ · 입문

1. Easy 카테고리 10문제, "정답지 안 보고" 풀기

Array · String · Hash Table 카테고리의 Easy 난이도 10문제를 골라 본인이 먼저 풀이를 작성합니다. 그다음에 이 레포의 풀이와 본인 풀이의 시간·공간 복잡도를 비교합니다. 차이가 나면 왜 그런지 파악.

추천 시작 문제: Two Sum, Valid Parentheses, Best Time to Buy and Sell Stock, Reverse Linked List, Merge Two Sorted Lists.
난이도 ★★ · 초중급

2. "한 알고리즘 카테고리만 7일간" 집중 학습

예: 일주일 동안 Two Pointers 카테고리만 풀기. 매일 Easy 1 + Medium 2개를 잡고, 마지막 날에는 해당 카테고리의 핵심 패턴을 정리한 노트를 작성합니다. 카테고리 표는 그 자체가 커리큘럼입니다.

난이도 ★★★ · 중급

3. Python 풀이를 C++로 직접 포팅

Easy/Medium 문제에서 Python 풀이만 보고 본인이 직접 C++로 옮긴 뒤, 이 레포의 C++ 풀이와 비교합니다. "같은 알고리즘이지만 언어 특성이 만드는 차이"를 몸으로 익히게 됩니다. Modern C++ 입문에 가장 효과적인 방법.

난이도 ★★★★ · 중상급

4. DP 30문제 — 점화식만 보고 코드 작성

Dynamic Programming 카테고리에서 30문제를 골라, 풀이 코드는 보지 말고 LeetCode 본문만 본 채로 점화식을 종이에 작성합니다. 그다음 코드로 옮기고, 마지막에 이 레포의 풀이와 비교. DP는 패턴 인식이 핵심이라 30문제 정도부터 직관이 생깁니다.

난이도 ★★★★★ · 고급

5. Hard 문제의 고급 자료구조 구현부터 직접

Trie, Segment Tree, BIT(Fenwick Tree), Union-Find 등 자료구조 자체를 본인 손으로 구현한 뒤, 이 레포의 Hard 문제 풀이에 적용. "라이브러리에 의존하지 않고 처음부터 짜는 경험"은 코딩 인터뷰 시스템 설계 라운드에서 결정적인 차이를 만듭니다.

9관련 기술 심화 학습 로드맵

8주 코딩 인터뷰 대비 플랜 (주당 약 7~10문제).

Week 1

Array + Hash Table 기초

전체 문제의 약 30%가 이 두 카테고리. Two Pointers, Sliding Window 패턴까지 함께. Easy 7개 + Medium 3개.

Week 2

String + Linked List + Stack/Queue

면접 단골 "Reverse Linked List", "Valid Parentheses", "LRU Cache(Design 카테고리)" 등을 포함. 포인터 조작FIFO/LIFO 자료구조에 익숙해지는 주.

Week 3

Tree + BFS + DFS

이진 트리 순회 4종(전위·중위·후위·레벨), 재귀 ↔ 반복 전환, 레벨 BFS, 경로 DFS. Easy 5개 + Medium 5개.

Week 4

Binary Search + Sort

"답을 이분 탐색하는" 패턴이 핵심 — "Find Minimum in Rotated Sorted Array" 류의 변형 이진 탐색. Sort는 라이브러리 호출이 대부분이므로 가볍게.

Week 5

Dynamic Programming 입문

1D DP (Climbing Stairs, House Robber) → 2D DP (Unique Paths, Longest Common Subsequence) 순서. "메모이제이션 → Bottom-up 변환"을 손에 익히는 게 목표. Medium 7개.

Week 6

Graph + Backtracking

그래프 표현(인접 리스트 vs 행렬), DFS/BFS on Graph, Union-Find, Topological Sort. Backtracking은 N-Queens·Subsets·Permutations 같은 고전을 한 번씩.

Week 7

고급 자료구조 — Trie · Heap · Segment Tree

"Word Search II"(Trie), "Kth Largest Element"(Heap), 구간 합·구간 업데이트(Segment Tree, BIT). 여기서부터 본격적인 Hard 영역.

Week 8

Hard 문제 + 모의 면접

지난 7주 카테고리에서 Hard 1개씩 총 7~10문제. 시간 제한(문제당 30분)을 두고 실제 면접처럼 풀이. 마지막에 이 레포 풀이와 본인 풀이를 비교해 회고.

10핵심 키워드 사전

레포 README와 풀이 파일을 읽다 보면 마주치는 기본 용어들.

표기
Big-O 표기법 (O(n), O(log n), O(n²))
입력 크기 n이 커질 때 알고리즘이 얼마나 느려지는지 보여주는 표기. O(1)은 입력 크기와 무관하게 상수 시간, O(log n)은 입력이 두 배 돼도 한 단계만 추가, O(n)은 입력에 비례, O(n²)은 입력 두 배면 시간 네 배, O(2^n)은 지수 폭발.
패턴
Two Pointers (투 포인터)
배열·문자열 양쪽 끝에서 시작해 가운데로 좁히거나, 두 인덱스를 같은 방향으로 다른 속도로 움직이는 기법. 정렬된 배열에서 합·차이 조건을 만족하는 쌍 찾기에 강력. 보통 O(n²)을 O(n)으로 줄여 줍니다.
패턴
Sliding Window (슬라이딩 윈도우)
연속된 부분 배열·부분 문자열을 "창문"처럼 보면서 한쪽 끝을 확장하고 다른 쪽 끝을 줄이며 조건을 만족시키는 패턴. "최장 부분 문자열", "정확히 K개 원소를 포함하는 부분 배열" 같은 문제에 자주 등장.
자료구조
Hash Table (해시 테이블, 파이썬 dict, C++ unordered_map)
평균 O(1)에 키-값 조회·삽입을 해내는 자료구조. LeetCode 풀이에서 가장 자주 등장하는 도구. "이 값이 이전에 등장했는가?"라는 질문을 빠르게 답할 수 있게 해줍니다.
자료구조
Binary Heap (이진 힙, Priority Queue)
최대/최소값을 O(log n)에 꺼낼 수 있는 자료구조. "K번째 큰 원소", "스트리밍 중간값" 같은 문제에 필수. Python은 heapq, C++은 priority_queue.
자료구조
Trie (트라이)
문자열의 접두사(prefix)를 트리 형태로 저장하는 자료구조. "사전에 있는 모든 단어를 보드에서 찾기"(Word Search II) 같은 문제에서 결정적. 사실상 직접 구현해야 하는 경우가 많아 한 번 짜둔 템플릿이 있으면 좋습니다.
자료구조
BIT / Fenwick Tree (이진 인덱스 트리)
"배열의 어느 구간의 합"을 O(log n)에 구하면서도 원소 업데이트도 O(log n)에 처리하는 자료구조. 구현이 짧고(20줄 정도) 강력해서 Hard 문제에 자주 등장. 위 4번 섹션의 카테고리 표 Note 컬럼에 BIT가 적힌 문제들이 좋은 연습 대상.
자료구조
Segment Tree (세그먼트 트리)
BIT의 상위 호환. 구간 합뿐 아니라 구간 최솟값·최댓값·gcd 등 "결합법칙이 성립하는 모든 연산"을 O(log n)에 처리. 구현은 길지만 표현력이 크고, 경쟁 프로그래밍과 인터뷰 모두에서 빛을 발합니다.
자료구조
Union-Find / Disjoint Set Union (DSU)
여러 원소를 그룹(집합)으로 묶었다가 합치거나 "같은 그룹인지" 확인하는 자료구조. 그래프 연결 성분, MST(최소 신장 트리, Kruskal 알고리즘) 등에서 필수. 거의 O(1)에 가까운 amortized 성능.
기법
Dynamic Programming (동적 계획법)
복잡한 문제를 더 작은 하위 문제로 나누고, 같은 하위 문제를 다시 계산하지 않도록 결과를 저장(memoization)하는 기법. "점화식을 세우면 자동으로 코드가 따라온다"는 게 핵심.
기법
Backtracking (백트래킹)
"가능한 모든 후보를 시도하다가 조건에 어긋나면 되돌아간다"는 탐색 전략. 순열·조합·부분집합 생성, N-Queens, 스도쿠 풀이 등에 사용.
기법
Greedy Algorithm (탐욕 알고리즘)
매 순간 "지금 가장 좋아 보이는 선택"을 하는 전략. 모든 문제에 통하진 않지만 통할 때는 DP보다 훨씬 빠릅니다. "이 문제가 정말 그리디로 풀리는가"의 증명이 어려운 함정 포인트.
기호
🔒 (Premium 표시)
README 표의 Tag 컬럼에 🔒가 있으면 LeetCode Premium 구독자만 문제 본문을 볼 수 있다는 뜻. 풀이 코드 자체는 이 레포에서 자유 열람 가능하므로, 코드를 먼저 보고 역으로 문제를 추정하는 학습도 가능합니다.

11참고 링크

레포 본체와, 함께 보면 좋은 외부 자료.

레포 본체

kamyu104/LeetCode-Solutions

같은 저자의 형제 레포

다른 OJ(Online Judge) 풀이

함께 보면 좋은 자료

알고리즘·인터뷰 학습 리소스

실용 가이드

지금 바로 시도해볼 만한 것들

  1. 북마크부터. 굳이 클론하지 말고 GitHub 페이지를 북마크. 풀이가 필요할 때 Ctrl+F로 카테고리 안에서 즉시 검색.
  2. 오늘은 한 카테고리만. README의 25개 카테고리 중 하나를 골라 Easy 3 + Medium 2개를 풀어봅니다. "오늘 Two Pointers의 날" 같은 식.
  3. 복잡도 가리기. 풀이 파일을 열 때 첫 두 줄(시간·공간 복잡도)을 가리고 본 뒤, 본인이 추정한 복잡도와 맞춰보기. 이 습관 하나가 면접 답변 품질을 크게 바꿉니다.
  4. Python ↔ C++ 양다리. Easy 문제에서 두 언어 풀이를 나란히 펴 놓고 비교 읽기. 한 언어만 쓰던 사람은 다른 언어의 표현 방식이 새로워 보일 겁니다.
  5. 본인 풀이를 PR로. CONTRIBUTING.md의 풀이 양식을 따라 본인이 푼 더 빠른 풀이를 PR로 보내보기. 이 레포의 진짜 가치는 "정답 베끼기"가 아니라 "내 풀이를 양식에 맞춰 정리하는 습관"에 있습니다.
원문 · kamyu104/LeetCode-Solutions, MIT License · 2026.05.28 TrendShift Daily 8위 기준 · github.com/kamyu104/LeetCode-Solutions