STUDY/[ 자료구조 ]
그리디 알고리즘
Lim임
2025. 11. 25. 02:52
그리디 알고리즘(Greedy Algorithm) 완전 정복 가이드
그리디 알고리즘이란?
Greedy(탐욕) 알고리즘은
“현재 순간에서 가장 최선이라고 생각되는 선택을 반복하여
전체 문제를 해결하는 알고리즘”
즉,
- 미래 상황은 고려하지 않고
- 지금 당장 가장 좋은 선택만을 계속해서 선택하는 방식이다.

그리디 알고리즘의 핵심 개념
- 지역 최적(Local Optimum)
매 과정에서 선택한 현재 시점에서의 최선의 선택
- 전역 최적(Global Optimum)
문제가 요구하는 최종적인 최선의 답
- 그리디의 성립 조건 (중요)
그리디 알고리즘은 모든 문제에 적용할 수 없다.
다음 조건을 만족할 때만 최적해를 보장한다.
- 탐욕적 선택 속성(Greedy Choice Property)
- 지금 내리는 최선의 선택이
나중에도 최선의 답을 만드는 데 문제 없음
- 지금 내리는 최선의 선택이
- 최적 부분 구조(Optimal Substructure)
- 문제를 부분 문제로 나눴을 때
부분 문제들의 최적해 조합이 전체 문제의 최적해가 됨
- 문제를 부분 문제로 나눴을 때
이 두 조건을 만족하지 않으면
→ 그리디는 '빠른 오답 생성기'가 된다.
그리디 알고리즘의 일반적인 흐름
- 문제를 정렬하거나, 규칙을 정의한다.
- 현재 시점에서 가장 이득이 되는 선택을 한다.
- 그 선택을 확정한다(취소하지 않음).
- 남은 문제에 대해 1~3을 반복한다.
특징:
- 되돌리지 않는다(Backtracking 없음)
- 경우의 수 계산을 하지 않는다
- 시간 복잡도가 빠르다 (대부분 O(N log N) 또는 O(N))
가장 유명한 예시로 이해하기
예시 1: 동전 최소 개수 문제
동전 종류가 [500, 100, 50, 10] 이고
금액 1260원을 만들 때
동전 개수를 최소로 사용하려면?
- 가장 큰 동전부터 사용한다 (Greedy)
- 500 → 500 → 100 → 100 → 50 → 10 → 0
이유:
큰 동전 먼저 사용해도
나중에 불리하지 않다는 “탐욕적 선택 속성”이 성립하기 때문
예시 2: 구명보트 문제
문제: 제한 무게 이하로 2명까지 태우는데 보트를 최소로 사용하기
해결법 → 가장 무거운 사람 + 가장 가벼운 사람 조합 시도
이유
- 가장 무거운 사람을 살리는 게 전체적으로 이득
- 무거운 사람끼리는 절대 limit 이하가 안되므로 조합이 불가능
- 가장 가벼운 사람은 누구에게나 붙을 가능성이 높음
- 따라서 무거운 사람과 가벼운 사람을 묶는 것이
전체적으로 최선의 선택이 됨
이를 구현하는 것이 투 포인터(two pointers) 그리디 전략
예시 3: 회의실 배정 문제
“가장 빨리 끝나는 회의”를 먼저 선택하면
전체적으로 가장 많은 회의를 배정할 수 있다.
그리디 알고리즘의 장점과 단점
장점
- 구현이 쉽다
- 빠르다
- 대부분 정렬 + 반복으로 해결
단점
- 항상 정답을 보장하지 않는다
- 문제 구조를 이해하지 않으면 오답이 발생함
- 탐욕적 선택 속성이 성립하지 않으면 절대 불가능
핵심 정리
그리디 = “현재 순간 최선”을 반복하여 전체 최선의 답을 구하는 알고리즘.
단, 이 선택이 전체적으로도 최선이라는 보장이 있어야만 사용 가능하다.