September 3, 2021

그리디 알고리즘


그리디 알고리즘 예제 - 거스름돈


문제

거스름돈으로 사용할 500원, 100원, 50원, 10원이 무한히 존재한다고 가정한다. 손님에게 돌려주어야 할 거스름돈이 N원일 때, 거슬러 주어야 할 최소한의 동전 갯수는?

소스코드

n = 1260
count = 0

coinList = [500, 100, 50, 10]

for coin in coinList:
    count += n // coin
    n %= coin

print(count)

핵심 아이디어

가장 큰 화폐 단위부터 거슬러준다.

정당성 분석

동전의 큰 단위가 항상 작은 단위의 배수이므로 작은 단위의 동전들을 종합해 더 작은 해가 나올 수 없다.

시간 복잡도 분석

K를 화폐 종류의 갯수라고 하자. 이 풀이의 시간 복잡도는 O(K)로 화폐 종류의 수에 의존한다.