전 세계 코딩 인터뷰가 묻는 3958개 LeetCode 문제 전체를 Python·Modern C++로 풀어두고 매주 업데이트하는 레포지토리. 별 5.2k, 포크 1.7k, 커밋 2만 건이 넘는 8년차 정답지.
이 레포가 정확히 뭘 하는가.
kamyu104/LeetCode-Solutions는 LeetCode에 출제된 3958개 전 문제의 해답을 Python과 Modern C++로 정리해 놓은 단일 저장소입니다. 매주 새 문제가 추가될 때마다 풀이가 함께 올라오고, 모든 풀이 파일 첫 두 줄에는 시간복잡도와 공간복잡도가 명시되어 있어 그냥 베끼는 게 아니라 "왜 이게 최적인지"를 같이 학습할 수 있도록 설계되어 있습니다.
일반적인 LeetCode 풀이 모음과의 결정적 차이: 3958문제 전체를 다루고, 주 단위로 8년 넘게 유지보수되고 있으며, 풀이마다 Time: O(n) / Space: O(1)이 명시되어 있다는 점입니다.
O(n)은 입력 크기 n에 비례, O(log n)은 입력이 두 배가 돼도 한 단계만 더 걸린다는 뜻. 면접관이 "이게 최선인가?"라고 묻는 순간 답해야 하는 언어입니다.TrendShift 8위에 오른 이유와 경쟁 레포 대비 강점.
LeetCode 풀이를 정리한 레포는 수천 개가 있습니다. 그중 이 레포가 "코딩 인터뷰 준비할 때 가장 먼저 떠올리는 이름" 중 하나가 된 데에는 몇 가지 분명한 이유가 있습니다.
비슷한 컨셉의 레포들 대부분은 "Easy 위주", "면접 빈출 75제", "Top 100"으로 출발해서 흐지부지됩니다. 이 레포는 전체 문제를 다 풀어두고 매주 새 문제까지 따라잡는 진행률 100% 상태를 유지하고 있습니다. README의 progress-3958/3958 배지가 그 증거입니다.
커밋 수 20,259건. 단순한 풀이 모음이 아니라 매주 LeetCode가 새 콘테스트 문제를 내면 며칠 안에 풀이가 올라오는 "살아 있는" 레포입니다. README 배지에도 update-weekly가 있고, 실제로 master 브랜치는 한 주도 빠지지 않고 변경됩니다.
대부분의 레포는 풀이 코드만 던지지만, 여기는 모든 파일이 두 줄짜리 주석으로 시작합니다 — // Time: O(n) / // Space: O(n). 한 줄짜리 풀이라도 "이 풀이가 왜 최적인지"를 학습자가 즉시 확인할 수 있습니다.
거의 모든 문제가 Python 버전과 C++ 버전을 동시에 제공합니다. 같은 알고리즘을 두 언어로 어떻게 표현하는지를 비교하면서 학습할 수 있고, 면접에서 어느 언어를 선택해도 참고 자료가 됩니다. 보조적으로 Java·Go·Rust·Swift·Kotlin·TypeScript 등 11개 언어 디렉토리도 존재합니다.
README는 단순한 번호 나열이 아니라 25개 알고리즘 카테고리(Array, DP, Graph, Trie, Bit Manipulation, …)별로 문제가 분류되어 있고, 각 행에 Difficulty·Tag·Note까지 있어 "DP만 집중적으로 풀어볼래" 같은 학습이 가능합니다.
풀이 파일에 알고리즘 설명·풀이 과정 주석은 거의 없습니다. 시간·공간 복잡도와 사용한 자료구조 태그가 전부. 따라서 해당 알고리즘을 이미 한 번은 본 사람이 "정답 코드를 빠르게 확인"하는 용도로 가장 강하고, 처음 배우는 사람은 LeetCode 본문이나 별도 알고리즘 책과 병행해야 합니다.
백엔드·프론트엔드라기보다 "언어 + 카테고리 매트릭스"로 봐야 한다.
이 레포는 일반적인 웹 서비스가 아니라 "풀이 코드의 모음집"입니다. 따라서 기술 스택은 다음 세 축으로 구성됩니다.
주력은 Python과 Modern C++(C++17 이상의 모던 기능을 적극 사용)입니다. 나머지 언어는 일부 문제 중심으로 채워져 있습니다.
auto 자동 타입 추론, unordered_map(해시맵), vector의 균일 초기화 {...}, 람다 [](...){ ... } 같은 문법을 자유롭게 씁니다. 옛날 C++(typedef, NULL, raw pointer)와는 코드 모양이 꽤 다릅니다.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(데이터 분석 문제) 카테고리가 별도로 존재합니다.
이 레포는 빌드도, 패키지 매니저도, 디펜던시도 없습니다. 인프라 측면에서 유일한 자동화는 다음과 같습니다.
.travis.yml)풀이가 적어도 컴파일·인터프리트가 되는지 확인하는 가벼운 CI(Continuous Integration, 지속적 통합) 설정이 있을 뿐. 문제마다 LeetCode 채점기를 호출하는 식의 자동 채점은 아닙니다 — 이는 LeetCode가 닫힌 채점 시스템이라 외부에서 자동화하기 어렵습니다.
MIT 라이선스라 학습·인용·포크·재배포가 자유. README 상단에는 진행률 / 업데이트 주기 / 방문자 수 / Saythanks 링크 등 사회적 신호 배지들이 붙어 있어 한눈에 활성도를 알 수 있게 했습니다.
"풀이의 표준 형식"이라는 작은 설계 결정이 만든 일관성.
이 레포의 "아키텍처"는 시스템 다이어그램이 아닌, 풀이 파일 한 개의 형식으로 정의됩니다. 8년간 2만 건의 커밋이 무너지지 않은 이유는 이 작은 규칙 덕분입니다.
레고 박스를 생각해 보세요. 어떤 블록이 들어 있어도 박스 한 칸의 규격은 같습니다. 이 레포의 풀이 파일들도 그렇습니다. "파일 첫 줄은 시간복잡도, 둘째 줄은 공간복잡도, 셋째 줄은 빈 줄, 그 뒤에 풀이"라는 규격을 정해두니, 3958개를 일관되게 유지할 수 있게 됩니다.
같은 문제의 C++ 버전도 첫 두 줄이 시간·공간 복잡도라는 규칙이 똑같이 지켜집니다.
모든 풀이 파일명은 LeetCode 문제 페이지의 슬러그(URL의 마지막 부분)와 동일합니다. 예: 문제 1. Two Sum의 URL이 leetcode.com/problems/two-sum이면 풀이는 two-sum.py / two-sum.cpp. 덕분에 문제 URL만 보면 풀이 파일을 즉시 찾아낼 수 있고, README의 표가 외부에서 깨질 일이 없습니다.
한 문제는 여러 알고리즘 카테고리에 동시에 등장합니다. 예를 들어 "Subarrays with XOR at Least K" 문제는 README의 Bit Manipulation 표에 등장하면서 동시에 Prefix Sum·Trie 표에도 들어갑니다. 학습자가 어느 카테고리를 공부 중이든 그 안에서 자연스럽게 발견할 수 있도록 한 의도적 중복입니다.
3958개 문제를 단일 README에 넣으면 GitHub 페이지가 렌더링되지 않습니다. 그래서 0001-1000.md, 1001-2000.md, 2001-3000.md, 그리고 메인 README.md(3001 이후 + 카테고리 인덱스)로 1000문제씩 샤딩해 분할 로딩합니다. 데이터베이스 샤딩과 동일한 발상을 마크다운에 적용한 셈입니다.
루트의 파일·폴더 하나하나가 어떤 역할을 하는가.
이 4개 파일이 사실상 사이트의 메인 페이지입니다. 표 형식으로 #(문제 번호) · Title(원본 링크) · Solution(C++/Python 풀이 링크) · Time · Space · Difficulty · Tag · Note가 들어 있습니다. README.md는 3001번 이후 새 문제 + 카테고리별 알고리즘 인덱스 두 가지 역할을 겸합니다.
각 언어별로 풀이 파일들이 평탄하게 펼쳐져 있습니다. 중첩 폴더 없음 — 한 디렉토리 안에 수천 개 파일이 직접 들어 있는 단순 구조입니다. 검색은 README의 표에서 카테고리·번호로, 직접 접근은 파일명(URL slug)으로 하는 것이 정상 동선입니다.
Python/에 남아 있고, Python 3에서만 동작하는 문법(예: walrus operator, type hint)을 쓴 새 풀이가 Python3/에 들어갑니다.REFERENCE.md는 풀이에 자주 등장하는 자료구조·알고리즘의 외부 설명 링크 모음(위키피디아·CP 사이트 등). CONTRIBUTING.md는 PR을 보낼 때 따라야 할 풀이 양식(시간·공간 복잡도 주석, 파일명 규칙) 가이드. LICENSE.md는 MIT.
매우 가벼운 CI 설정 — 변경된 풀이 파일이 컴파일·인터프리트 단계에서 깨지지 않는지를 확인하는 정도. LeetCode 채점기와 직접 통신하는 자동 채점은 아닙니다(LeetCode는 공식 외부 API를 닫아 두었습니다).
이 레포를 펴고 "무엇을 어떻게 보면 가장 많이 배울까".
이 레포에서 가장 강력한 학습 무기는 "같은 알고리즘을 두 언어로 어떻게 표현하는지" 비교입니다. 위 4번 섹션의 two-sum.py / two-sum.cpp를 다시 보면, 같은 해시맵 알고리즘인데도 다음과 같은 차이가 드러납니다.
이 작은 비교 하나만으로도 "왜 면접관이 두 언어 다 해본 사람을 좋아하는지"가 체감됩니다.
파일을 열 때 첫 두 줄을 가리고 풀이를 본 뒤, 본인이 추정한 복잡도와 비교하는 습관을 들이면, 자연스럽게 "이 패턴은 O(n log n)이구나" 같은 직관이 쌓입니다.
수학 문제집 정답지를 볼 때 "최종 답"만 가리고 풀이를 보면 사고 흐름이 남는 것처럼, 여기선 "복잡도"를 가리고 코드를 본 뒤 맞추는 게 같은 효과를 줍니다.
README의 25개 카테고리는 그 자체로 알고리즘 학습 로드맵입니다. "오늘은 Two Pointers만 10문제 풀어본다" 같은 식으로 카테고리 단위 집중 학습이 가능합니다. 각 카테고리 표는 난이도(Easy / Medium / Hard)가 섞여 있어 "쉬운 것부터 어려운 것"으로 진행하기에도 편합니다.
C++을 학교에서만 배운 사람이라면 "Modern C++이 진짜 어떻게 생겼는지"를 짧은 단위로 익히기 좋습니다.
고난이도 문제에서 등장하는 자료구조를 카테고리에서 자연스럽게 마주칩니다 — BIT(Binary Indexed Tree, Fenwick Tree), Segment Tree, Trie, Union-Find, Monotonic Stack/Queue 등. 이 레포의 표 Note 컬럼은 해당 문제가 어떤 자료구조·알고리즘을 쓰는지 명시해 두기 때문에, "BIT 처음 배울 때 어떤 문제를 풀어보면 좋을까?"의 답을 카테고리 표만 보고 추릴 수 있습니다.
"실행"이라는 단계가 거의 없는 레포라 진입장벽도 낮다.
일반적인 오픈소스 레포는 Docker나 빌드 도구가 필요하지만, 이 레포는 "풀이 파일을 읽고 본인 환경에서 따라치는" 형태라 시스템 요구사항이 매우 가볍습니다.
브라우저로 GitHub에서 풀이를 보는 것만으로도 학습이 가능합니다. 아무것도 설치할 필요 없음.
Python은 3.8 이상이면 대부분의 풀이가 그대로 실행됩니다. C++은 g++ / clang++에서 -std=c++17 이상 옵션이 필요합니다.
풀이를 검증하려면 LeetCode 사이트에 그대로 붙여넣어 제출. Premium은 필수 아님 — 단, README의 🔒 표시 문제는 Premium 구독자만 LeetCode 본문을 볼 수 있습니다(풀이 코드는 자유 열람).
2만 건의 커밋 + 수만 개의 풀이 파일을 포함한 git history 때문에 클론 크기가 꽤 됩니다. 필요한 언어 폴더만 sparse-checkout 하면 더 줄일 수 있습니다.
대부분의 사용 패턴은 "GitHub 검색 → 특정 풀이 파일 열람"입니다. 클론하면 500MB가 디스크에서 의미 없이 자리만 차지하니, 북마크 + GitHub 검색이 더 가볍습니다. 정 필요하면 git clone --depth=1로 최신 스냅샷만 받으면 50MB 이하로 줄어듭니다.
난이도별 5단계. 본인 수준에 맞게 시작점을 골라보세요.
Array · String · Hash Table 카테고리의 Easy 난이도 10문제를 골라 본인이 먼저 풀이를 작성합니다. 그다음에 이 레포의 풀이와 본인 풀이의 시간·공간 복잡도를 비교합니다. 차이가 나면 왜 그런지 파악.
예: 일주일 동안 Two Pointers 카테고리만 풀기. 매일 Easy 1 + Medium 2개를 잡고, 마지막 날에는 해당 카테고리의 핵심 패턴을 정리한 노트를 작성합니다. 카테고리 표는 그 자체가 커리큘럼입니다.
Easy/Medium 문제에서 Python 풀이만 보고 본인이 직접 C++로 옮긴 뒤, 이 레포의 C++ 풀이와 비교합니다. "같은 알고리즘이지만 언어 특성이 만드는 차이"를 몸으로 익히게 됩니다. Modern C++ 입문에 가장 효과적인 방법.
Dynamic Programming 카테고리에서 30문제를 골라, 풀이 코드는 보지 말고 LeetCode 본문만 본 채로 점화식을 종이에 작성합니다. 그다음 코드로 옮기고, 마지막에 이 레포의 풀이와 비교. DP는 패턴 인식이 핵심이라 30문제 정도부터 직관이 생깁니다.
Trie, Segment Tree, BIT(Fenwick Tree), Union-Find 등 자료구조 자체를 본인 손으로 구현한 뒤, 이 레포의 Hard 문제 풀이에 적용. "라이브러리에 의존하지 않고 처음부터 짜는 경험"은 코딩 인터뷰 시스템 설계 라운드에서 결정적인 차이를 만듭니다.
8주 코딩 인터뷰 대비 플랜 (주당 약 7~10문제).
전체 문제의 약 30%가 이 두 카테고리. Two Pointers, Sliding Window 패턴까지 함께. Easy 7개 + Medium 3개.
면접 단골 "Reverse Linked List", "Valid Parentheses", "LRU Cache(Design 카테고리)" 등을 포함. 포인터 조작과 FIFO/LIFO 자료구조에 익숙해지는 주.
이진 트리 순회 4종(전위·중위·후위·레벨), 재귀 ↔ 반복 전환, 레벨 BFS, 경로 DFS. Easy 5개 + Medium 5개.
"답을 이분 탐색하는" 패턴이 핵심 — "Find Minimum in Rotated Sorted Array" 류의 변형 이진 탐색. Sort는 라이브러리 호출이 대부분이므로 가볍게.
1D DP (Climbing Stairs, House Robber) → 2D DP (Unique Paths, Longest Common Subsequence) 순서. "메모이제이션 → Bottom-up 변환"을 손에 익히는 게 목표. Medium 7개.
그래프 표현(인접 리스트 vs 행렬), DFS/BFS on Graph, Union-Find, Topological Sort. Backtracking은 N-Queens·Subsets·Permutations 같은 고전을 한 번씩.
"Word Search II"(Trie), "Kth Largest Element"(Heap), 구간 합·구간 업데이트(Segment Tree, BIT). 여기서부터 본격적인 Hard 영역.
지난 7주 카테고리에서 Hard 1개씩 총 7~10문제. 시간 제한(문제당 30분)을 두고 실제 면접처럼 풀이. 마지막에 이 레포 풀이와 본인 풀이를 비교해 회고.
레포 README와 풀이 파일을 읽다 보면 마주치는 기본 용어들.
O(1)은 입력 크기와 무관하게 상수 시간, O(log n)은 입력이 두 배 돼도 한 단계만 추가, O(n)은 입력에 비례, O(n²)은 입력 두 배면 시간 네 배, O(2^n)은 지수 폭발.dict, C++ unordered_map)
heapq, C++은 priority_queue.Note 컬럼에 BIT가 적힌 문제들이 좋은 연습 대상.Tag 컬럼에 🔒가 있으면 LeetCode Premium 구독자만 문제 본문을 볼 수 있다는 뜻. 풀이 코드 자체는 이 레포에서 자유 열람 가능하므로, 코드를 먼저 보고 역으로 문제를 추정하는 학습도 가능합니다.레포 본체와, 함께 보면 좋은 외부 자료.
Ctrl+F로 카테고리 안에서 즉시 검색.