알고리즘 독학 스터디 플랜

moon.kick·2025년 5월 3일

알고리즘 자가 학습 계획

사용자가 제공한 주제를 바탕으로 알고리즘 학습 계획을 세운다.
8주에 걸쳐 기본부터 고급까지 다루고, 각 주마다 문제를 풀어가며 실력을 쌓는다.
예를 들어 첫 주에는 시간 복잡도와 Big O를 이해하고 연습하고,
둘째 주에는 정렬과 기초적인 DP 문제를 풀면서 연습한다.
고급 기법(예: DP 스트림 활용, 그래프 알고리즘, TSP 등)을 일주일에 하나씩 다루며,
Week 8에 프로젝트를 통해 학습을 마무리한다.

알고리즘 스터디 — 필수 개념 보고서


1. 복잡도 분석 & Big-O

  • 점근적 분석(Asymptotic Analysis) - 입력 크기 nn → ∞ 일 때의 성능 평가
  • Big-O / Ω / Θ 표기 - 상한·하한·정확한 성장률
  • 시간 vs 공간 복잡도 - 연산 횟수, 메모리 사용량 비교
  • 연산 모델 사례 - 고대 / 러시아 곱셈으로 연산 카운팅

2. 정렬 알고리즘 핵심

  • 비교 정렬 - 선택·삽입·퀵·머지·힙
  • 비-비교 정렬 - Counting / Radix / Bucket
  • Stable vs Unstable - 동일 키 원소 순서 보존 여부
  • 내부 vs 외부 정렬 - 메모리 한계에 따른 처리 전략

3. 동적계획법 (DP) 기초

  • 점화식(Recurrence) 수립 — 하위 문제로 쪼개기
  • Memoization(Top-Down) vs Tabulation(Bottom-Up)
  • 1차원 DP 패턴 — 2 × N 타일링, 피보나치류
  • 스트림 API 구현 팁reduce, collect 로 DP 표 채우기

4. 조합·구간 DP

  • 이항계수 & 파스칼 삼각형nCk = n-1Ck + n-1Ck-1
  • 구간 DP(Interval DP) — 서브배열/좌석 배치처럼 구간별 최적값 저장
  • 복잡도 축소 트릭 — 대칭성·누적합으로 상태 수 감소

5. 그래프 탐색 기초

  • 그래프 표현 — 인접 리스트·행렬·엣지 리스트
  • BFS vs DFS — 레벨 탐색, 재귀·스택 활용
  • 최단거리(BFS on Unweighted) — ‘가장 먼 노드’ 문제 패턴
  • 연결 성분 & 방문 체크visited[] 관리 전략

6. 그래프 고급 & Bitmask DP

  • 최소 비용 트리 개요 — Kruskal, Prim 아이디어
  • 다익스트라 vs 플로이드-워셜 — 단일·전-소스 최단경로
  • Bitmask DP — 상태 압축 2NN2^N·N 형태, TSP 패턴
  • State Compression Tips — 비트 연산으로 방문 집합 관리

7. 성능 최적화·프로파일링

  • 프로파일러 — Python timeit, Java JMH 사용법
  • 캐싱 & 재사용 — LRU Cache, DP 배열 재활용
  • 스트림 병렬화parallelStream() 주의점(스레딩 오버헤드)
  • 메모리-vs-속도 Trade-off — 공간 늘려 시간 단축 전략

8. 테스트 전략 & 자동 채점 파이프라인

  • 모의 코딩 테스트 플로우 — 제한시간 내 문제 풀이·디버깅
  • 디버깅 패턴 — 로깅, 슬라이딩 윈도, 투 포인터 시각화
  • CI/CD with GitHub Actions — 빌드 → 단위 테스트 → OJ API 채점
  • 회고 문서화 — 실패 원인·교훈·리팩터링 기록

활용 팁

  • 절마다 핵심 공식/패턴을 A5 종이 한 장 요약 → 암기 카드화
  • Git 레포 README에 위 개념 링크 & 예제 코드 첨부 → 포트폴리오로 바로 사용 가능

8 주 알고리즘 독학 스터디 플랜

(하루 평균 1 ~ 1.5 시간 학습 기준, 주말은 복습·정리 시간으로 확보)

주차핵심 테마 & 목표필수 개념·자료실전 문제 (기본 ➜ 심화)실전 미션
1주알고리즘 맛보기 & Big-O
“코드가 얼마나 빨라야 하는가?” 감 잡기
- 빅-O 표기법, 점근적 분석
- 고대/러시아 곱셈법으로 연산 횟수 비교 실습
- BOJ 2720 세탁소 사장… (Greedy, 난도 ★)
- 직접 구현: 고대‧러시아 곱셈 vs 표준 곱셈
① 두 곱셈 알고리즘을 Python/Java 둘 다 작성
② 입력 n에 대한 연산 횟수 로그 남기고 그래프化
2주정렬 총정리 + Radix Sort 실습- 내부/외부 정렬 흐름도
- 비교 기반 vs 비-비교 기반
- Stable vs Unstable
- BOJ 2750 수 정렬하기 (선택·버블)
- BOJ 10989 수 정렬 3 (Counting)
- 직접 구현: Radix Sort
각 정렬을 Git 레포지토리로 관리; README에 장·단점을 표로 정리
3주기초 DP ① – 1차원 점화식- 점화식 세우기, Memoization vs Tabulation
- 2 × N 타일링 패밀리
- BOJ 11726 2×N 타일링
- BOJ 2579 계단 오르기
① 두 문제를 배열·HashMap·Stream API(Java) 3가지 버전으로 풀이
② 실행 시간 비교
4주기초 DP ② – 조합 & 구간- 이항계수, 파스칼 삼각형
- 구간 DP 아이디어
- BOJ 1010 다리 놓기
- BOJ 2302 극장 좌석
극장 좌석 문제를 “D-Day 좌석 배치 서비스” 콘셉트로 짧은 블로그 포스팅
5주그래프 ① – BFS/DFS & 최단거리- 그래프 표현법, BFS vs DFS
- 레벨 탐색
- Programmers Lv 3 가장 먼 노드
- BOJ 2606 바이러스
BFS 큐 동작을 그림으로 그려 Git Wiki에 업로드
6주그래프 ② – 최소 비용 & Bitmask DP- 최소 신장 트리 스케치
- TSP Bitmask DP 패턴
- BOJ 2098 외판원 순회 (Bitmask DP)
- Programmers 배달 (다익스트라)
외판원 순회 풀이에서 “State Compression” 설명 노트 작성
7주복습 & 속도 개선 챌린지- 프로파일링 툴(JMH, timeit)
- 캐싱, 스트림 병렬화
과거 제출 코드 재채점: 시간·메모리 Top 10 % 노리기이전 주차 중 3문제 선택 ➜ Stream ➜ 반복문 ➜ 병렬 스트림 성능 비교 리포트
8주모의 코딩 테스트 & 회고- 테스트 전략, 디버깅 패턴
- GitHub Actions로 자동 채점 파이프라인
- Programmers/BOJ 랜덤 5문제 (난도 혼합)① 2 시간 모의 시험, 회고 로그 작성
② 레포지토리 README ‘스터디 회고’ 섹션 완성

학습 루틴 (매일 권장)

  1. 이론 20 분

    • 강의 ▶︎ TIL(Today I Learned) 노트 3줄 요약
    • 추천: Algorithms, 4/e (SEDGEWICK) 해당 챕터 skim
  2. 문제 풀이 40 분

    • 실전 문제를 손코딩 → IDE 옮겨 빌드 → 제출
    • “왜 통과/실패했는지” 한 줄 주석 필수
  3. 리뷰 10 분

    • 블로그·Git 커밋 (‘문제번호-풀이전략.md’)
    • 다른 사람 코드 1개 읽고 배우기

Tip : GitHub repo root에 /docs 폴더를 만들어 주간 회고, 느낀점, 성능 비교 그래프 등을 Markdown으로 축적하면 취업/포트폴리오에 그대로 활용 가능합니다.


참고 & 도구

  • 온라인 저지 : Baekjoon · Programmers · LeetCode (주차별 3:2:1 비율)

  • 서적 :

    • 《파이썬 알고리즘 인터뷰》 (쉬운 해설)
    • 《알고리즘 문제 해결 전략 3/e》(종만북) — 심화 주차용
  • IDE 플러그인 : GitHub Copilot → 단, 최종 코드는 스스로 재작성하며 이해 체크

  • 프로파일링 : Python timeit, Java JMH

  • 스트림 학습 : Baeldung “Java Streams Cookbook” → 3·7주 연계


3가지 체크-포인트

  1. 커버리지 : 8주 종료 시 “정렬-DP-그래프” 세 축에서 각 10문제 이상 풀이
  2. 속도 : 상위 20 % 성능 목표 (메모리 / 실행 시간)
  3. 문서화 : 매주 블로그 글 ≥ 1 편 (개념 or 회고)

혼자 공부하더라도 “문서 = 동료” 라는 마음으로 기록을 남기면, 복습 효율은 물론 미래의 나에게 최고의 선물이 됩니다. 화이팅! 💪

profile
@mgkick

0개의 댓글