Dauniverse

👩‍💻[백준 | Python] 5585번: 거스름돈 본문

코테

👩‍💻[백준 | Python] 5585번: 거스름돈

Daunique 2024. 3. 15. 18:40

1. 문제 해석

 

조건 1. 500, 100, 50, 10, 5, 1엔 동전으로 잔돈을 줄 때, 최소가 되는 값


2. 내 코드

조건을 나눠 반복문 실행 (총 6번 반복)
money = 1000 - int(input())

coin = 0
while money > 0:
    if money >= 500:
        coin += money // 500
        money = money % 500
    elif money >= 100:
        coin += money // 100
        money = money % 100
    elif money >= 50:
        coin += money // 50
        money = money % 50
    elif money >= 10:
        coin += money // 10
        money = money % 10
    elif money >= 5:
        coin += money // 5
        money = money % 5
    else:
        coin += money
        break
    
print(coin)

 

 

처음 풀이에서는 아래의 코드가 계속 반복되는 걸 볼 수 있다.
coin += money // [동전 금액]; money = money % [동전 금액];

coins 리스트를 만들어 [동전 금액] 부분만 불러오면 길이가 짧아진다.
money = 1000 - int(input())
coins = [500, 100, 50, 10, 5] # 1엔 동전은 포함하지 않아 반복 횟수는 5.
cnt = 0

for coin in coins:
    cnt += money // coin
    money = money % coin

# money를 업데이트하면서, money의 나머지는 1로 나뉘어도 5 이하인 수니까 cnt에 바로 더했다.
print(cnt + money)

3.  최종 코드 

반복문 필요없는 풀이
더보기
money//500 : 500엔 동전이 몇 개 필요할지 계산
money//100%5 : 100엔 동전이 몇 개 필요할지 계산, 이때 500엔을 초과하는 부분(나머지만 계산)
money//50%2 : 50엔 동전이 몇 개 필요할지 계산, 이때 100엔을 초과하는 부분(나머지만 계산)
money//10%5 : 10엔 동전이 몇 개 필요할지 계산, 이때 50엔을 초과하는 부분(나머지만 계산)
money//5%2 : 5엔 동전이 몇 개 필요할지 계산, 이때 10엔을 초과하는 부분(나머지만 계산)
money%5 : money//1%5과 같다.
money = 1000 - int(input())
print(money//500 + money//100%5 + money//50%2 + money//10%5 + money//5%2 + money%5)

 

문제 링크

https://www.acmicpc.net/problem/5585

 

5585번: 거스름돈

타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사

www.acmicpc.net