문제
타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.
입력
입력은 한줄로 이루어져있고, 타로가 지불할 돈(1 이상 1000미만의 정수) 1개가 쓰여져있다.
출력
제출할 출력 파일은 1행으로만 되어 있다. 잔돈에 포함된 매수를 출력하시오.
예제 입력 1
380
예제 출력 1
4
예제 입력 2
1
예제 출력 2
15
코드
x = int(input())
pay = 1000 - x
count = 0
# 500엔
# 100엔
# 50엔
# 10엔
# 5엔
# 1엔
# 최소한의 거스름돈을 만들어야 하므로, 내림차순으로 정렬한다.(그리디 알고리즘)
coins = [500, 100, 50, 10, 5, 1]
for coin in coins:
count += pay // coin
pay = pay % coin
print(count)
코드 풀이
- x를 인풋으로 받고 1000엔에서 x를 빼준다.
- x는 지불할 돈임
- 잔돈이 있는 coins 리스트를 초기화한다.
- 반복문을 돌면서 몫은 count에 나머지는 pay에 할당한다.
핵심 포인트
- 그리디 알고리즘
- 가장 큰 동전의 단위부터 나누어준다.
- 가장 큰 동전부터 내림차순으로 정렬을 해주고 반복문을 진행한다.
'백준 코딩테스트 > 그리디(Greedy)' 카테고리의 다른 글
10162번: 전자레인지 (8 / 7) - 브론즈 3 (3) | 2024.10.07 |
---|---|
2720번: 세탁소 사장 동혁 (8 / 5) - 브론즈 3 (1) | 2024.10.07 |
4796번: 캠핑 (8 / 10) - 브론즈 1 (3) | 2024.10.07 |
2810번: 컵홀더 (8 / 12) - 브론즈 1 (2) | 2024.10.07 |
11047번: 동전 0 (7 / 31) - 실버 4 (0) | 2024.10.07 |