알고리즘 시리즈 목차 | 자료구조부터 DP·그리디까지 코딩 테스트 학습 순서

이 글의 핵심

어디서부터 공부해야 할지 모르겠다면 이 목차에서 출발하면 됩니다. 각 글은 백준·프로그래머스·LeetCode 문제를 Python과 C++로 풀며 시간 복잡도를 줄이는 과정을 보여 주고, 기간별 학습 코스와 Python·C++ 선택, 문제 사이트 선택 같은 자주 받는 질문의 답도 함께 정리했습니다.

시리즈 소개

알고리즘과 자료구조는 코딩 테스트와 기술 면접에서 가장 자주 묻는 주제입니다. 이 시리즈는 배열 같은 기본 자료구조에서 출발해 정렬, 탐색, DP, 그리디까지 앞 편의 개념을 뒤 편이 재사용하도록 순서를 잡았습니다.

각 편은 백준, 프로그래머스, LeetCode 문제를 Python과 C++ 코드로 풀면서, O(n²) 풀이를 O(n log n)이나 O(n)으로 줄이고 지수 시간 완전 탐색을 메모이제이션으로 다항 시간으로 바꾸는 과정을 보여 줍니다.


전체 목차

자료구조 (초급~중급)

#01 배열과 리스트

20분 | 초급 | 튜토리얼

  • 배열 vs 리스트, 동적 배열 (Python list, C++ vector)
  • 인덱스 접근 O(1), 삽입/삭제 O(n)
  • 투 포인터 기초, 부분 배열 문제

#02 스택과 큐

18분 | 초급 | 튜토리얼

  • 스택(LIFO), 큐(FIFO) 개념과 구현
  • 괄호 검사, 되돌리기, DFS/BFS 활용
  • Python list vs deque, C++ stack/queue

#03 해시 테이블

20분 | 중급 | 튜토리얼

  • O(1) 탐색의 비밀, 해시 함수, 충돌 해결
  • Python dict, C++ unordered_map
  • 두 수의 합, 중복 검사, 빈도 계산

#04 트리

22분 | 중급 | 튜토리얼

  • 이진 트리, BST, 트리 순회 (전위/중위/후위)
  • 재귀적 구조, 계층 표현 (파일 시스템)
  • 트리 높이, 깊이, 균형

#05 그래프

32분 | 중급 | 튜토리얼

  • 그래프 표현 (인접 리스트, 인접 행렬)
  • 방향/무방향, 가중/비가중 그래프
  • 그래프 순회 기초, 연결 요소

정렬 (초급~중급)

#06 기본 정렬

30분 | 초급 | 튜토리얼

  • 버블, 선택, 삽입 정렬 (O(n²))
  • 안정 정렬 vs 불안정 정렬
  • 정렬 알고리즘 시간복잡도 비교

#07 고급 정렬

32분 | 중급 | 튜토리얼

  • 퀵, 병합, 힙 정렬 (O(n log n))
  • 분할 정복, 피벗 선택, 안정성
  • 계수 정렬 O(n + k), 기수 정렬 O(d·(n + b)) — 비교 없는 정렬

#08 정렬 문제

28분 | 중급 | 튜토리얼

  • K번째 수, 정렬 활용 투 포인터
  • 커스텀 정렬, 람다 함수
  • 실전 문제 패턴 (백준, 프로그래머스)

탐색과 순회 (중급)

#09 이진 탐색

16분 | 중급 | 튜토리얼

  • O(log n) 탐색, 정렬된 배열 필수
  • Lower Bound, Upper Bound
  • 파라메트릭 서치 (최적화 → 결정 문제)

#10 BFS와 DFS

22분 | 중급 | 튜토리얼

  • 너비 우선 탐색 (큐), 깊이 우선 탐색 (스택/재귀)
  • 가중치 없는 그래프의 최단 경로 (BFS), 모든 경로 나열 (DFS)
  • 방문 체크, 레벨 순회

#11 백트래킹

26분 | 고급 | 튜토리얼

  • 가능한 모든 경우를 탐색 (완전 탐색)
  • N-Queen, 순열, 조합, 부분집합
  • 가지치기로 최적화

동적 프로그래밍 (중급~고급)

#12 DP 기초

25분 | 중급 | 튜토리얼

  • 중복 계산 제거, 메모이제이션
  • Top-Down (재귀+메모), Bottom-Up (반복+테이블)
  • 피보나치, 계단 오르기, 최단 경로

#13 DP 패턴

22분 | 고급 | 튜토리얼

  • 1차원 DP: 누적 합, 최대 부분 배열
  • 2차원 DP: LCS, LIS, 배낭 문제
  • 상태 전이 설계, 점화식 도출

#14 DP 문제

30분 | 고급 | 튜토리얼

  • 실전 DP 문제 풀이 (백준, 프로그래머스)
  • 상태 정의, 초기값, 순서
  • 공간 최적화 (O(n²) → O(n))

최적화 기법 (중급)

#15 그리디

48분 | 중급 | 튜토리얼

  • 매 순간 최선의 선택 (탐욕 선택)
  • 활동 선택, 동전 교환, 최소 신장 트리
  • 그리디 vs DP, 정당성 증명

#16 투 포인터

22분 | 중급 | 튜토리얼

  • 두 수의 합, 부분 배열 합
  • O(n²) → O(n) 최적화
  • 정렬 + 투 포인터 패턴

#17 슬라이딩 윈도우

42분 | 중급 | 튜토리얼

  • 고정/가변 윈도우, 연속 부분 배열
  • 최대/최소 구간 합, 조건 만족 최소/최대 길이
  • 모노토닉 덱, 상각 분석

학습 경로

목적에 따라 시리즈 일부만 골라 읽어도 됩니다. 아래 기간은 하루 한두 시간 정도를 가정한 대략적인 기준이며, 각 편의 대표 문제를 풀이 없이 다시 풀 수 있는지를 기준으로 진도를 조절하는 편이 정확합니다.

코딩 테스트 입문 (2주 코스)

#01 배열 → #02 스택/큐 → #03 해시테이블 → #06 기본정렬 → #09 이진탐색

기본 자료구조와 정렬·탐색을 익히는 단계로, 백준 브론즈~실버 수준 문제를 혼자 풀 수 있는 것을 목표로 합니다.

중급 문제 해결 (4주 코스)

#04 트리 → #05 그래프 → #10 BFS/DFS → #12 DP기초 → #16 투포인터 → #17 슬라이딩윈도우

트리·그래프 순회와 DP 기초를 다루며, 백준 실버~골드, 프로그래머스 Lv.2 정도가 연습 대상입니다.

고급 알고리즘 (6주 코스)

#07 고급정렬 → #11 백트래킹 → #13 DP패턴 → #14 DP문제 → #15 그리디

상태 설계가 까다로운 DP, 정당성 증명이 필요한 그리디, 가지치기가 핵심인 백트래킹을 다룹니다. 백준 골드 이상, 프로그래머스 Lv.3 수준 문제와 잘 맞습니다.

코딩 테스트 집중 (3주 특훈)

#01 배열 → #03 해시테이블 → #10 BFS/DFS → #12 DP기초 → #15 그리디 → #16 투포인터

시험이 임박했을 때 자주 나오는 유형만 추린 경로입니다. 해시로 중복을 제거하는 풀이, 그래프 탐색, 기본 DP, 그리디는 국내 기업 코딩 테스트에서 반복적으로 등장하는 유형입니다.


이 순서로 배치한 이유

목차가 자료구조에서 시작하는 것은, 뒤쪽 알고리즘 대부분이 앞쪽 자료구조를 “부품”으로 쓰기 때문입니다. BFS는 큐가 없으면 설명할 수 없고, 다익스트라는 우선순위 큐(힙)를, 백트래킹은 재귀 호출 스택을 전제로 합니다. 해시 테이블(#03)을 일찍 배치한 이유는 코딩 테스트에서 O(n²) 풀이를 O(n)으로 바꾸는 가장 흔한 수단이 “이미 본 값을 딕셔너리에 기록해 두기”이기 때문입니다. 두 수의 합, 부분 배열 합, 중복 검사 같은 문제가 모두 이 한 가지 아이디어로 풀립니다.

정렬(#06~#08)을 탐색보다 앞에 둔 것도 같은 이유입니다. 이진 탐색과 투 포인터는 “정렬되어 있다”는 조건 위에서만 성립하므로, 정렬이 무엇을 보장하는지(순서, 안정성)를 먼저 알아야 뒤의 기법이 왜 맞는지 납득할 수 있습니다. DP를 BFS/DFS 뒤에 둔 것은, DP의 Top-Down 방식이 결국 “중복 호출을 메모해 두는 DFS”이기 때문에 재귀 탐색에 익숙해진 뒤 보면 훨씬 자연스럽게 연결되기 때문입니다.

공부하다가 자주 막히는 지점

처음 알고리즘을 공부할 때 흔히 겪는 문제는 “풀이를 보면 이해되는데 혼자서는 시작을 못 한다”는 것입니다. 이럴 때는 새 문제를 더 많이 푸는 것보다, 이미 푼 문제를 며칠 뒤 풀이 없이 다시 풀어 보는 편이 효과가 큽니다. 두 번째 풀 때 막히는 지점이 곧 아직 체화되지 않은 패턴입니다.

두 번째로 흔한 것은 입력 크기를 보지 않고 풀이를 고르는 습관입니다. N이 10만이면 O(n²)은 약 100억 번 연산이라 대부분의 채점 환경에서 시간 초과가 나고, O(n log n) 이하가 필요합니다. 반대로 N이 20 이하라면 2ⁿ 완전 탐색도 충분히 통과합니다. 문제를 읽자마자 제약 조건부터 확인해 “허용되는 복잡도”를 정하면, 목차의 어느 기법을 꺼내야 할지가 절반쯤 정해집니다.

마지막으로 Python으로 풀 때는 알고리즘이 맞는데도 시간 초과가 나는 경우가 있습니다. 입력이 많으면 input() 대신 sys.stdin.readline을 쓰고, 깊은 재귀는 기본 재귀 한도(1000)에 걸려 RecursionError가 나므로 sys.setrecursionlimit을 올리거나 반복문으로 바꿔야 합니다. 각 편의 Python 예제는 이런 부분을 함께 짚고 있습니다.

준비 기간은 사람마다 편차가 큽니다. 자료구조와 기본 탐색을 처음 배우는 단계라면 몇 달, 이미 기본기가 있다면 몇 주 정도 목표 회사의 출제 유형 위주로 집중하는 경우가 많습니다. 기간을 정해 두기보다 목차의 각 주제에서 대표 문제를 풀이 없이 다시 풀 수 있는지를 진도의 기준으로 삼는 편이 정확합니다.


관련 시리즈


추천 문제 사이트

국내

해외

학습 자료


같이 보면 좋은 글