Programming 기초/Coding Test

[이코테 # Greedy1] 거스름돈 문제 풀이

코딩상륙작전 2023. 6. 2. 17:13

* Greedy Algorism

" 현재 상황에서 지금 당장 좋은 것만 고르는 방법"

 

* 거스름돈 문제

카운터에 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리의 동전이 무한히 존재한다. 손님에게 거슬러 줘야 할 돈이 N원일 때 거슬러 줘야 할 동전의 최소 개수.(단, 거슬러 줘야 할 돈 N은 항상 10의 배수이다.)

# 해설 보기 전 original 본인 답변

# 500원= Five_H, 100원= One_H, 50원 = Fifty , 10원 = Ten
# 손님에게 거슬러줘야 할 돈 N = change
# 상품 가격 : ProductPrice = 1350원
ProductPrice = 740
print("상품 가격 : %d" % ProductPrice)
payment = int(input("받은 돈: "))	# 2000원을 받는다.
change = payment - ProductPrice
Five_H = change // 500
One_H = (change - 500 * Five_H) // 100
Fifty = (change - 500 * Five_H - 100 * One_H) // 50
Ten = (change - 500 * Five_H - 100 * One_H - 50 * Fifty) // 10
total_coin = Five_H + One_H + Fifty + Ten

# 거스름돈 계산
if change < 0:
    print("현금이 부족합니다.")
else:
    print("거스름돈은 %d 원입니다." % change)
    print("500원 : %d, 100원 : %d, 50원 : %d, 10원 : %d" % (Five_H, One_H, Fifty, Ten))
    print("거슬러줘야 할 동전의 최소 개수는 %d개 입니다." % total_coin)

 

* 거스름돈 문제 해설 답

현 거스름돈 문제에서는 큰 단위가 항상 작은 단위의 배수 형태이므로 최적의 해를 보장할 수 있다.

N = 1260
count = 0

coin_type = [500, 100, 50, 10]

for i in coin_type:
    count += N // i
    N = N % i
print(count)