[예제1] 거스름돈
✔문제
당신은 음식점의 계산을 도와주는 점원이다. 카운터에는 거스름돈으로 사용할 500원,100원,50원,10원짜리 동전이 무한히 존재한다고 가정한다. 손님에게 거슬러 줘야 할 돈이 N원일 때 거슬러줘야할 동전의 최소 개수를 구하라. 단 N은 항상 10의 배수이다.
접근 방향 👉 가장 큰 화폐 단위부터 거슬러 주는 것
[작성 코드]
N = int(input())
one = N // 500
two =(N % 500)//100
three = (N % 500)%100//50
four = (((N % 500)%100)%50)//10
print(one+two+three+four)
입력 : 1260
출력 : 6
[답안 예시]
n = 1260
count = 0
coin_types = [500,100,50,10]
for coin in coin_types:
count += n // coin
n %= coin
print(count)
📌 그리디 알고리즘으로 문제의 해법을 찾았을 때는 그 해법의 정당성을 검토해야 한다. 이 문제에서 그리디로 해결할 수 있는 이유는, 가지고 있는 동전 중에서 큰 단위가 항상 작은 단위의 배수이므로 작은 단위를 종합해 다른 해가 나올 수 없기 때문이다.
ex. 800원을 거슬러줘야하는데 동전이 500,400,10이원이면 문제가 생긴다.
(500 + 100 + 100 + 100) << (400 + 400)
@이것이 코딩 테스트다 with 파이썬