Skip to content

About

<자바 알고리즘 인터뷰 with 코틀린> 102가지 알고리즘 문제 풀이로 완성하는 코딩 테스트

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

24 Commits

Folders and files

Repository files navigation

자바 알고리즘 인터뷰 with 코틀린 — 학습 기록

《자바 알고리즘 인터뷰 with 코틀린》(박상길, 책만)을 Java 중심으로 공부하면서 남기는 학습용 저장소입니다. 원본 예제 코드(src/)는 손대지 않고, notes/에 개념 정리와 문제 풀이 회고를 쌓아갑니다.

항목 내용
원본 저장소 onlybooks/java-algorithm-interview (fork)
도서 정보 책만 도서 페이지
학습 언어 Java (코틀린 코드는 비교·참고용)
문제 출처 LeetCode · 프로그래머스
진도 관리 챕터 단위 (진도표 참고)

🎯 학습 목표

  • 자료구조·알고리즘의 동작 원리를 말로 설명할 수 있을 정도로 이해한다
  • 문제를 보고 어떤 자료구조·기법을 쓸지 판단하는 감각을 기른다
  • 모든 풀이의 시간·공간 복잡도를 근거와 함께 설명한다
  • 정리한 내용을 그대로 블로그 글로 옮길 수 있는 형태로 남긴다

📁 저장소 구조

java-algorithm-interview/
├── src/                    # 원본(책) 예제 코드 — 수정하지 않음
│   ├── ch02 ~ ch24/
│   └── datatype/           # ListNode, TreeNode 공용 자료형
├── test/                   # 원본 테스트 코드
├── assets/                 # 원본 이미지(표지, 마인드맵)
├── notes/                  # ⭐ 내 학습 노트
│   ├── README.md           # 노트 인덱스
│   ├── TEMPLATE.md         # 챕터 노트 템플릿
│   ├── ch01 ~ ch24/
│   │   ├── README.md       # 개념 정리 + 문제별 회고
│   │   └── solutions/      # 내가 직접 푼 Java 코드 (PN.java)
│   └── ...
└── README.md

노트 전체 목록은 notes/README.md에 있습니다. 원본 코드와 내 코드를 섞지 않는 것이 핵심입니다. 나중에 git fetch upstream으로 원본을 갱신해도 충돌이 나지 않습니다.


🔁 학습 루틴

단계 하는 일 남기는 것
1 문제를 먼저 직접 푼다 (20~30분 타임박스) notes/chXX/solutions/PN.java
2 시간 초과 시 힌트만 보고 재시도, 그래도 안 되면 책 풀이 확인 막힌 지점 메모
3 책 풀이(src/chXX)와 내 풀이를 비교 접근 차이·복잡도 차이
4 챕터 노트에 개념/패턴/실수 정리 notes/chXX/README.md
5 3일 · 1주 · 1달 뒤 재풀이하고 진도표 갱신 상태 뱃지 업데이트

진행 상태 표기

⬜ 예정 · 🔄 진행 중 · ✅ 완료 · 🔁 재복습 필요

챕터 노트 템플릿 (notes/TEMPLATE.md)
# NN장. 주제

> 학습일: YYYY-MM-DD | 상태: 🔄

## 1. 핵심 개념
- 자료구조/알고리즘의 정의와 동작 원리
- 시간·공간 복잡도

## 2. 자바 구현 포인트
- 어떤 클래스/API를 쓰는가 (ArrayList, Deque, PriorityQueue, ...)
- 자주 쓰는 관용구와 주의점

## 3. 문제 풀이
### PN. 문제 제목 (★)
- **접근**: 어떻게 생각했는가
- **복잡도**: 시간 O(?) / 공간 O(?)
- **내 풀이 vs 책 풀이**: 무엇이 달랐는가
- **막혔던 점**:

## 4. 헷갈렸던 것 / 다시 볼 것
- [ ] ...

## 5. 한 줄 요약

✍️ 커밋 컨벤션

형식 예시
chNN: <내용> ch06: 문자열 조작 개념 및 투 포인터 정리
PN: <내용> P8: 빗물 트래핑 스택 풀이 노트 추가
docs: <내용> docs: README 진도표 갱신
refactor: <내용> refactor: ch07 내 풀이 정리

🔄 원본 저장소 변경사항 반영

git fetch upstream
git merge upstream/main   # 또는 git rebase upstream/main
git push origin main

🗺️ 전체 개념 지도

책 전체를 한 장으로 정리한 마인드맵. 챕터를 시작할 때마다 지금 배우는 게 전체 어디에 위치하는지 확인합니다.

마인드맵


📊 진도

장 주제 문제 수 원본 코드 내 노트 상태
1장 코딩 인터뷰 & 코딩 테스트 — — ch01 ⬜
2장 자바, 세상에서 가장 유명한 언어 — src/ch02 ch02 ⬜
3장 코틀린, 구글이 인정한 공식 언어 — src/ch03 ch03 ⬜
4장 자료형 — src/ch04 ch04 ✅
5장 빅오 — src/ch05 ch05 ⬜
6장 문자열 조작 6 src/ch06 ch06 🔄
7장 배열 6 src/ch07 ch07 🔄
8장 연결 리스트 7 src/ch08 ch08 ⬜
9장 스택, 큐 6 src/ch09 ch09 ⬜
10장 데크, 우선순위 큐 4 src/ch10 ch10 ⬜
11장 해시 테이블 5 src/ch11 ch11 ⬜
12장 그래프 9 src/ch12 ch12 ⬜
13장 최단 경로 문제 3 src/ch13 ch13 ⬜
14장 트리 13 src/ch14 ch14 ⬜
15장 힙 2 src/ch15 ch15 ⬜
16장 트라이 2 src/ch16 ch16 ⬜
17장 정렬 6 src/ch17 ch17 ⬜
18장 이진 검색 6 src/ch18 ch18 ⬜
19장 비트 조작 5 src/ch19 ch19 ⬜
20장 슬라이딩 윈도우 3 src/ch20 ch20 ⬜
21장 그리디 알고리즘 5 src/ch21 ch21 ⬜
22장 분할 정복 2 src/ch22 ch22 ⬜
23장 다이나믹 프로그래밍 5 src/ch23 ch23 ⬜
부록 2022년 카카오 공채 만점 가이드 7 src/ch24 ch24 ⬜
합계 102

📝 문제 풀이 목록 (102문제)

원본 저장소의 문제 목록에 내 노트 열을 추가했습니다. 각 링크는 해당 문제의 회고 섹션으로 바로 이동합니다.

번호 제목 난이도 장 풀이 코드 내 노트
1 유효한 팰린드롬 ★ 6장. 문자열 조작 P1_1.java
P1_2.java
P1_3.kt
노트
2 문자열 뒤집기 ★ 6장. 문자열 조작 P2_1.java
P2_2.kt
노트
3 로그 파일 재정렬 ★ 6장. 문자열 조작 P3_1.java
P3_2.kt
노트
4 가장 흔한 단어 ★ 6장. 문자열 조작 P4_1.java
P4_2.kt
노트
5 그룹 애너그램 ★★ 6장. 문자열 조작 P5_1.java
P5_2.kt
노트
6 가장 긴 팰린드롬 부분 문자열 ★★ 6장. 문자열 조작 P6_1.java
P6_2.kt
노트
7 두 수의 합 ★ 7장. 배열 P7_1.java
P7_2.java
P7_3.java
P7_4.java
P7_5.kt
노트
8 빗물 트래핑 ★★★ 7장. 배열 P8_1.java
P8_2.java
P8_3.kt
노트
9 세 수의 합 ★★ 7장. 배열 P9_1.java
P9_2.java
P9_3.kt
노트
10 배열 파티션 I ★ 7장. 배열 P10_1.java
P10_2.java
P10_3.kt
노트
11 자신을 제외한 배열의 곱 ★★ 7장. 배열 P11_1.java
P11_2.kt
노트
12 주식을 사고팔기 가장 좋은 시점 ★ 7장. 배열 P12_1.java
P12_2.java
P12_3.kt
노트
13 팰린드롬 연결 리스트 ★ 8장. 연결 리스트 P13_1.java
P13_2.java
P13_3.java
P13_4.kt
노트
14 두 정렬 리스트의 병합 ★ 8장. 연결 리스트 P14_1.java
P14_2.kt
노트
15 역순 연결 리스트 ★ 8장. 연결 리스트 P15_1.java
P15_2.java
P15_3.kt
노트
16 두 수의 덧셈 ★★ 8장. 연결 리스트 P16_1.java
P16_2.java
P16_3.kt
노트
17 페어의 노드 스왑 ★★ 8장. 연결 리스트 P17_1.java
P17_2.java
P17_3.java
P17_4.kt
노트
18 홀짝 연결 리스트 ★★ 8장. 연결 리스트 P18_1.java
P18_2.kt
노트
19 역순 연결 리스트 II ★★ 8장. 연결 리스트 P19_1.java
P19_2.kt
노트
20 유효한 괄호 ★ 9장. 스택, 큐 P20_1.java
P20_2.kt
노트
21 중복 문자 제거 ★★★ 9장. 스택, 큐 P21_1.java
P21_2.java
P21_3.kt
노트
22 일일 온도 ★★ 9장. 스택, 큐 P22_1.java
P22_2.kt
노트
23 큐를 이용한 스택 구현 ★ 9장. 스택, 큐 P23_1.java
P23_2.kt
노트
24 스택을 이용한 큐 구현 ★ 9장. 스택, 큐 P24_1.java
P24_2.kt
노트
25 원형 큐 디자인 ★★ 9장. 스택, 큐 P25_1.java
P25_2.kt
노트
26 원형 데크 디자인 ★★ 10장. 데크, 우선순위 큐 P26_1.java
P26_2.kt
노트
27 k개 정렬 리스트 병합 ★ 10장. 데크, 우선순위 큐 P27_1.java
P27_2.kt
노트
28 원점에 가장 가까운 k개의 점 ★★ 10장. 데크, 우선순위 큐 P28_1.java
P28_2.java
P28_3.kt
노트
29 더 맵게 ★ 10장. 데크, 우선순위 큐 P29_1.java 노트
30 해시맵 디자인 ★ 11장. 해시 테이블 P30_1.java
P30_2.kt
노트
31 보석과 돌 ★ 11장. 해시 테이블 P31_1.java
P31_2.java
P31_3.kt
노트
32 중복 문자 없는 가장 긴 부분 문자열 ★★ 11장. 해시 테이블 P32_1.java
P32_2.kt
노트
33 상위 k 빈도 엘리먼트 ★★ 11장. 해시 테이블 P33_1.java
P33_2.java
P33_3.kt
노트
34 완주하지 못한 선수 ★ 11장. 해시 테이블 P34_1.java
P34_2.kt
노트
35 섬의 개수 ★★ 12장. 그래프 P35_1.java
P35_2.kt
노트
36 전화번호 문자 조합 ★★ 12장. 그래프 P36_1.java
P36_2.kt
노트
37 순열 ★★ 12장. 그래프 P37_1.java
P37_2.kt
노트
38 조합 ★★ 12장. 그래프 P38_1.java
P38_2.kt
노트
39 조합의 합 ★★ 12장. 그래프 P39_1.java
P39_2.kt
노트
40 부분집합 ★★ 12장. 그래프 P40_1.java
P40_2.kt
노트
41 일정 재구성 ★★ 12장. 그래프 P41_1.java
P41_2.java
P41_3.kt
노트
42 여행 경로 ★★ 12장. 그래프 P42_1.java
P42_2.kt
노트
43 코스 일정 ★★ 12장. 그래프 P43_1.java
P43_2.java
P43_3.kt
노트
44 네트워크 딜레이 타임 ★★ 13장. 최단 경로 문제 P44_1.java
P44_2.kt
노트
45 k 경유지 내 가장 저렴한 항공권 ★★ 13장. 최단 경로 문제 P45_1.java
P45_2.java
P45_3.kt
노트
46 게임 맵 최단 거리 ★★ 13장. 최단 경로 문제 P46_1.java 노트
47 이진 트리의 최대 깊이 ★ 14장. 트리 P47_1.java
P47_2.java
P47_3.kt
노트
48 이진 트리의 직경 ★ 14장. 트리 P48_1.java
P48_2.kt
노트
49 가장 긴 동일 값의 경로 ★ 14장. 트리 P49_1.java
P49_2.kt
노트
50 이진 트리 반전 ★ 14장. 트리 P50_1.java
P50_2.java
P50_3.java
P50_4.java
P50_5.java
P50_6.kt
노트
51 두 이진 트리 병합 ★ 14장. 트리 P51_1.java
P51_2.kt
노트
52 이진 트리 직렬화 & 역직렬화 ★★★ 14장. 트리 P52_1.java
P52_2.kt
노트
53 균형 이진 트리 ★ 14장. 트리 P53_1.java
P53_2.kt
노트
54 최소 높이 트리 ★★ 14장. 트리 P54_1.java
P54_2.kt
노트
55 정렬된 배열의 이진 탐색 트리 변환 ★ 14장. 트리 P55_1.java
P55_2.kt
노트
56 이진 탐색 트리(BST)를 더 큰 수 합계 트리로 ★★ 14장. 트리 P56_1.java
P56_2.kt
노트
57 이진 탐색 트리(BST) 합의 범위 ★ 14장. 트리 P57_1.java
P57_2.java
P57_3.java
P57_4.java
P57_5.kt
노트
58 이진 탐색 트리(BST) 노드 간 최솟값 ★ 14장. 트리 P58_1.java
P58_2.java
P58_3.kt
노트
59 전위, 중위 순회 결과로 이진 트리 구축 ★★ 14장. 트리 P59_1.java
P59_2.java
P59_3.kt
노트
60 배열의 k번째 큰 엘리먼트 ★★ 15장. 힙 P60_1.java
P60_2.java
P60_3.kt
노트
61 이중 우선순위 큐 ★★★ 15장. 힙 P61_1.java
P61_2.java (예정)
P61_3.kt
노트
62 트라이 구현 ★★ 16장. 트라이 P62_1.java
P62_2.kt
노트
63 팰린드롬 페어 ★★★ 16장. 트라이 P63_1.java
P63_2.java
P63_3.kt
노트
64 리스트 정렬 ★★ 17장. 정렬 P64_1.java
P64_2.java
P64_3.kt
노트
65 구간 병합 ★★ 17장. 정렬 P65_1.java
P65_2.kt
노트
66 삽입 정렬 리스트 ★★ 17장. 정렬 P66_1.java
P66_2.java
P66_3.kt
노트
67 가장 큰 수 ★★ 17장. 정렬 P67_1.java
P67_2.kt
노트
68 유효한 애너그램 ★ 17장. 정렬 P68_1.java
P68_2.kt
P68_3.kt
노트
69 색 정렬 ★★ 17장. 정렬 P69_1.java
P69_2.kt
노트
70 이진 검색 ★ 18장. 이진 검색 P70_1.java
P70_2.java
P70_3.java
P70_4.java
P70_5.kt
노트
71 회전 정렬된 배열 검색 ★★ 18장. 이진 검색 P71_1.java
P71_2.kt
노트
72 두 배열의 교집합 ★ 18장. 이진 검색 P72_1.java
P72_2.java
P72_3.java
P72_4.kt
노트
73 두 수의 합 II ★ 18장. 이진 검색 P73_1.java
P73_2.java
P73_3.java
P73_4.kt
노트
74 2D 행렬 검색 II ★★ 18장. 이진 검색 P74_1.java
P74_2.kt
노트
75 입국심사 ★★★ 18장. 이진 검색 P75_1.java
P75_2.kt
노트
76 싱글 넘버 ★ 19장. 비트 조작 P76_1.java
P76_2.kt
노트
77 해밍 거리 ★ 19장. 비트 조작 P77_1.java
P77_2.kt
노트
78 두 정수의 합 ★★★ 19장. 비트 조작 P78_1.java
P78_2.java
P78_3.kt
노트
79 UTF-8 검증 ★★ 19장. 비트 조작 P79_1.java
P79_2.kt
노트
80 1비트의 개수 ★ 19장. 비트 조작 P80_1.java
P80_2.java
P80_3.kt
노트
81 최대 슬라이딩 윈도우 ★★★ 20장. 슬라이딩 윈도우 P81_1.java
P81_2.java
P81_3.java
P81_4.kt
노트
82 부분 문자열이 포함된 최소 윈도우 ★★★ 20장. 슬라이딩 윈도우 P82_1.java
P82_2.java
P82_3.kt
노트
83 가장 긴 반복 문자 대체 ★★ 20장. 슬라이딩 윈도우 P83_1.java
P83_2.kt
노트
84 주식을 사고팔기 가장 좋은 시점 II ★ 21장. 그리디 알고리즘 P84_1.java
P84_2.kt
노트
85 키에 따른 대기열 재구성 ★★ 21장. 그리디 알고리즘 P85_1.java
P85_2.kt
노트
86 태스크 스케줄러 ★★ 21장. 그리디 알고리즘 P86_1.java
P86_2.kt
노트
87 주유소 ★★ 21장. 그리디 알고리즘 P87_1.java
P87_2.java
P87_3.kt
노트
88 쿠키 부여 ★ 21장. 그리디 알고리즘 P88_1.java
P88_2.kt
노트
89 과반수 엘리먼트 ★ 22장. 분할 정복 P89_1.java
P89_2.java
P89_3.java
P89_4.kt
노트
90 괄호를 삽입하는 여러가지 방법 ★★ 22장. 분할 정복 P90_1.java
P90_2.java
P90_3.kt
노트
91 피보나치 수 ★ 23장. 다이나믹 프로그래밍 P91_1.java
P91_2.java
P91_3.java
P91_4.java
P91_5.kt
노트
92 최대 서브 배열 ★ 23장. 다이나믹 프로그래밍 P92_1.java
P92_2.java
P92_3.java
P92_4.kt
노트
93 계단 오르기 ★ 23장. 다이나믹 프로그래밍 P93_1.java
P93_2.java
P93_3.kt
노트
94 집 도둑 ★ 23장. 다이나믹 프로그래밍 P94_1.java
P94_2.java
P94_3.kt
노트
95 도둑질 ★★★ 23장. 다이나믹 프로그래밍 P95_1.java 노트
96(문제 1) 신고 결과 받기 ★ 부록. 2022년 카카오 공채 만점 가이드 P96_1.java
P96_2.kt
노트
97(문제 2) k진수에서 소수 개수 구하기 ★★ 부록. 2022년 카카오 공채 만점 가이드 P97_1.java
P97_2.java
P97_3.java
P97_4.java
P97_5.kt
노트
98(문제 3) 주차 요금 계산 ★★ 부록. 2022년 카카오 공채 만점 가이드 P98_1.java
P98_2.kt
노트
99(문제 4) 양궁대회 ★★ 부록. 2022년 카카오 공채 만점 가이드 P99_1.java
P99_2.kt
노트
100(문제 5) 양과 늑대 ★★★ 부록. 2022년 카카오 공채 만점 가이드 P100_1.java
P100_2.kt
노트
101(문제 6) 파괴되지 않은 건물 ★★★ 부록. 2022년 카카오 공채 만점 가이드 P101_2.java
P101_3.kt
노트
102(문제 7) 사라지는 발판 ★★★ 부록. 2022년 카카오 공채 만점 가이드 P102_1.java
P102_2.kt
노트

🧩 기타 예제 코드

책 본문에서 개념 설명에 쓰인 예제 코드 목록입니다.


📚 원본 저장소 안내

이 저장소는 onlybooks/java-algorithm-interview의 포크입니다. src/, test/, assets/의 예제 코드와 이미지의 저작권은 원저자(박상길)와 출판사(책만)에 있으며, 학습 목적으로만 사용합니다. notes/ 이하의 정리 내용은 제가 직접 작성한 것입니다.

About

<자바 알고리즘 인터뷰 with 코틀린> 102가지 알고리즘 문제 풀이로 완성하는 코딩 테스트

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages