12강 / 20강

탐욕 알고리즘 — 지금 제일 좋아 보이는 걸 고른다

쿠폰 자동 적용은 왜 가끔 손님에게 손해일까

탐욕 알고리즘 — 지금 제일 좋아 보이는 걸 고른다
매 순간 가장 좋아 보이는 선택을 한다. 빠르고 단순하지만, 가끔 틀립니다.

손님 장바구니가 52,000원입니다. 쓸 수 있는 쿠폰이 세 장 있어요.

  • A — 10,000원 할인 (3만 원 이상)
  • B — 15% 할인, 최대 12,000원 (5만 원 이상)
  • C — 5,000원 할인 (제한 없음)

쿠폰은 한 장만 쓸 수 있습니다. 어떤 걸 자동으로 적용해 줘야 할까요?

당연히 가장 많이 깎이는 것이죠. B = 52,000 × 15% = 7,800원… 앗, A가 더 낫네요. 이렇게 지금 이 순간 가장 이득인 것을 고르는 방식을 탐욕 알고리즘(greedy algorithm)이라고 합니다.

쿠폰 한 장이면 탐욕이 항상 정답입니다.
Python 브라우저에서 실행

그런데 탐욕이 지는 순간

쿠폰을 여러 장 쓸 수 있게 정책을 바꿨습니다. 단, 총 할인 한도는 20,000원. 그리고 각 쿠폰에는 사용 조건이 붙어 있어요.

이제 "가장 큰 것부터"가 정답이 아닐 수 있습니다.

가장 큰 것 하나를 잡느라 더 좋은 조합을 놓치는 전형적인 사례.
Python 브라우저에서 실행

🎮 쿠폰 조합기

쿠폰을 직접 만들고 한도를 조절하면서 탐욕과 완전 탐색의 결과를 나란히 비교해 보세요. 탐욕이 지는 경우를 만들어 보는 것이 이번 실습의 목표입니다. 계산 횟수도 함께 표시되니, 완전 탐색의 비용도 확인하세요.

쿠폰 조합기 — 탐욕이 지는 경우를 직접 만들어 보세요
불러오는 중…

실무에서의 현실적인 타협

실제 쇼핑몰은 이렇게 합니다.

상황선택이유
쿠폰 1장만 사용 가능탐욕탐욕이 곧 최적. 계산 즉시.
쿠폰 여러 장, 개수 적음(≤15)완전 탐색 또는 DP정확한 최적을 보장
쿠폰 종류가 아주 많음탐욕 + 정책 제한"중복 사용 최대 2장" 같은 규칙으로 n을 줄임
배송 박스 포장탐욕(큰 것부터)최적은 어렵지만 실용적으로 충분

"정책을 단순하게 만들어 알고리즘 문제를 없앤다"는 것도 시스템 관리자의 훌륭한 해결책입니다.

탐욕의 성공 여부는 '문제의 구조'에 달려 있습니다.
Python 브라우저에서 실행
🤔 확인 문제
탐욕 알고리즘의 정의로 가장 알맞은 것은?
🤔 확인 문제
쿠폰 25장 중 조합을 완전 탐색하면 몇 가지 경우를 봐야 할까요?
🤔 확인 문제
화폐 단위가 [1, 3, 4]원일 때 6원을 거슬러 주려 합니다. 탐욕(큰 것부터)의 결과는?