그리디란?
그리디(greedy, 탐욕법) 는 매 순간 가장 좋아 보이는 선택을 하면서 전체
최적해에 도달하는 방법입니다. 멀리 내다보지 않고 눈앞의 최선만 고르는데도
전체 답이 최적이 되는, 신기하지만 강력한 전략입니다.
핵심은 "언제 그리디가 옳은가" 를 아는 것입니다. 아무 문제에나 그리디를 쓰면
틀립니다.
1. 그리디가 통하는 두 조건
그리디가 최적해를 보장하려면 보통 다음 두 성질이 필요합니다.
- 탐욕적 선택 속성(greedy choice property): 매 단계의 지역적 최선 선택이
전체 최적해의 일부가 된다. - 최적 부분 구조(optimal substructure): 한 번 선택한 뒤 남은 문제도 같은
방식으로 풀린다.
이 두 가지를 증명할 수 있어야 그리디를 안심하고 씁니다.
2. 고전 예: 동전 거스름돈
500, 100, 50, 10원 동전으로 거스름돈을 줄 때, 큰 동전부터 최대한 쓰면 동전
개수가 최소가 됩니다.
1260원 = 500×2 + 100×2 + 50×1 + 10×1 → 6개 (최적)
이것이 통하는 이유는 큰 단위가 작은 단위의 배수라서 큰 걸 안 쓰면 손해이기
때문입니다. 하지만 동전이 {1, 3, 4}처럼 배수 관계가 깨지면 그리디가 틀립니다
— 6원을 4+1+1(3개)로 만들지만 최적은 3+3(2개)입니다. 그리디의 함정을 보여 주는
대표 예입니다.
3. 정렬이 거의 항상 동반된다
그리디 문제는 대부분 "어떤 기준으로 정렬한 뒤 순서대로 선택" 하는 형태입니다.
그래서 "무엇을 기준으로 정렬해야 그리디가 옳은가"를 찾는 것이 풀이의 핵심입니다.
- 회의실 배정 → 끝나는 시간 기준 정렬.
- 최소 동전 → 큰 단위부터.
- 마감 있는 작업 → 마감/이득 기준 정렬.
4. 대표 문제: 활동 선택(회의실 배정)
겹치지 않게 최대한 많은 회의를 잡는 문제. 끝나는 시간이 빠른 회의부터 고르면
최적입니다.
직관: 가장 일찍 끝나는 회의를 고르면 뒤에 남는 시간이 가장 많아져, 더 많은
회의를 넣을 여지가 생깁니다. 이 "교환 논증(exchange argument)"이 그리디
정당성 증명의 전형입니다.
5. 그리디 vs DP
그리디와 DP는 둘 다 최적 부분 구조를 쓰지만 다릅니다.
| 그리디 | DP | |
|---|---|---|
| 선택 | 지역 최선 하나 | 모든 선택을 비교 |
| 속도 | 보통 더 빠름 | 보통 더 느림 |
| 정당성 | 증명 필요 | 항상 옳음(상태가 맞으면) |
그리디가 옳음을 증명하기 어렵다면, 안전하게 DP로 푸는 것이 낫습니다.
정리
그리디는 매 순간의 최선으로 전체 최적에 도달합니다. 핵심은 올바른 정렬 기준을
찾고 그것이 옳음을 증명하는 것. 배수 관계가 깨진 동전 예처럼, 검증 없는 그리디는
위험합니다. 다음 강의에서 대표 문제들을 코드로 풉니다.