탐욕 알고리즘은 항상 최적의 결과를 도출하는 것은 아니지만, 어느 정도 최적에 근사한 값을 빠르게 도출할 수 있는 장점이 있다. 이 장점으로 인해 탐욕 알고리즘은 근사 알고리즘으로 사용할 수 있다.
A라는 손님은 5000원을 지불하고 4080원의 물건값을 계산했다. 거스름돈은 최소한의 동전갯수로 하려고 한다.
sol)
1. 선택 절차 - 동전 중에서 가장 값비싼 동전을 시작해서 점점 present value가 낮은 동전을 선택한다.
2. 적절성 검사 - 선택한 동전들의 합이 거슬러 줄 금액을 초과하는지 검사. 초과하면 가장 마지막 선택한 동전을 삭제하고 그 다음 낮은 value의 동전을 선택한다.
3. 해답검사 - 선택된 동전들의 합이 거슬러 줄 금액과 일치하는지 검사한다.
note!! - 이 문제는 매트로이드. 즉, Greedy 알고리즘을 이용하여 최적해를 구할 수 있는 문제구조.
백준, ATM
a = [3,1,4,3,2]
b = sorted(a)
part = 0
answer = 0
for i in range(len(b)):
part = part + b[i]
answer = answer + part
print(sum) #32
백준, 전자레인지
a = 300
b = 60
c = 10
def micro(T):
if T % 10 !=0:
print(-1)
else:
aT = T // a
bT = (T % a) // b
cT = (T % b) // c
print(aT, bT, cT)
micro(360) #1, 1, 0