#그리디

매 순간 최선의 선택을 반복해 답을 만드는 그리디 문제를 다룬다. 현재 10개의 풀이가 있다.

그리디 알고리즘 학습 가이드

필요한 주제만 펼쳐서 그리디 선택을 설계하고 검증하는 방법을 익힌다.

그리디 기본 개념

그리디 알고리즘은 매 순간 현재 기준에서 가장 좋아 보이는 선택을 하고, 선택을 되돌리지 않은 채 최종 답을 만든다.

구간 선택 문제에서 가장 빨리 끝나는 구간을 선택하고 이후 겹치지 않는 구간을 선택하는 그림
현재 선택이 미래에 남겨 주는 선택 공간을 가장 크게 만드는 것이 대표적인 그리디 기준이다.
  • 후보: 현재 선택할 수 있는 여러 선택지
  • 그리디 기준: 매 단계에서 어떤 후보를 고를지 정하는 규칙
  • 확정: 선택한 값을 다시 바꾸지 않고 다음 단계로 진행
  • 목표: 모든 선택을 마친 뒤 최적의 결과를 얻음

활동 선택, 최소 회의실 배정, 현재까지의 최솟값 유지처럼 한 번의 선택이 이후 상태를 제한하는 문제에서 자주 쓴다.

그리디 선택이 안전한지 증명하기

그리디 문제는 “지금 가장 좋아 보이는 선택”이라는 직관만으로는 충분하지 않다. 해당 선택을 포함해도 최적해를 잃지 않는 근거가 필요하다.

최적해의 첫 선택 O를 그리디 선택 G로 바꾸어도 뒤의 선택 X와 Y를 유지할 수 있음을 보이는 교환 논증 그림
최적해의 첫 선택을 그리디 선택으로 바꾸어도 나머지 선택이 가능하면 그리디 선택은 안전하다.
  • 교환 논증: 어떤 최적해의 선택을 그리디 선택으로 바꾸어도 결과가 나빠지지 않음을 보임
  • 탐욕적 선택 속성: 현재의 최적 선택을 포함하는 최적해가 항상 존재함
  • 최적 부분 구조: 선택 후 남은 문제의 최적해도 전체 최적해를 구성함

증명하기 어렵다면 그리디를 바로 구현하지 말고, 정렬·동적 계획법·완전탐색과 비교해 선택을 되돌릴 필요가 없는지 먼저 확인한다.

대표적인 그리디 패턴
문제 조건그리디 기준대표 유형
겹치지 않는 구간을 최대한 선택끝나는 시간이 빠른 순서활동 선택
현재까지의 최선 상태 유지최솟값·최댓값 갱신주식 최대 수익
가장 큰 우선순위부터 처리힙의 최댓값 또는 최솟값작업·자원 배정
앞선 선택과 충돌하지 않게 배치정렬된 순서로 가능한 선택회의실·구간 배정
앞 차량이나 앞 상태를 따라잡는지 비교도착 시간 또는 누적 상태Car Fleet
그리디가 실패하는 경우

모든 문제에서 가장 큰 값이나 가장 작은 값을 먼저 고르면 안 된다. 현재 선택이 미래의 조합을 제한하고, 선택을 바꿨을 때 더 좋은 결과가 생길 수 있으면 그리디만으로는 부족하다.

1, 3, 4 동전으로 6을 만들 때 4를 먼저 고르면 세 개가 필요하지만 3 두 개가 최적임을 보이는 그림
동전 1, 3, 4로 6을 만들 때 큰 동전 4를 먼저 고르는 선택은 최적이 아니다.

이 경우에는 여러 선택 조합을 비교해야 하므로 동적 계획법이나 완전탐색이 필요할 수 있다. 그리디를 선택하기 전에 반례를 만들어 보는 습관이 중요하다.

자주 하는 실수
  • 정렬 기준을 문제의 목표와 반대로 선택하는 경우
  • 현재 값이 좋아 보인다는 이유만으로 그리디의 정당성을 증명하지 않는 경우
  • 같은 값이나 같은 끝점의 포함 여부를 잘못 처리하는 경우
  • 선택한 항목과 충돌하는 이전 상태를 제거하지 않는 경우
  • 그리디로 풀 수 없는 반례를 동적 계획법 없이 처리하려는 경우

전체 문제 풀이 보기