문제
춘향이는 편의점 카운터에서 일한다.
손님이 2원짜리와 5원짜리로만 거스름돈을 달라고 한다. 2원짜리 동전과 5원짜리 동전은 무한정 많이 가지고 있다. 동전의 개수가 최소가 되도록 거슬러 주어야 한다. 거스름돈이 n인 경우, 최소 동전의 개수가 몇 개인지 알려주는 프로그램을 작성하시오.
예를 들어, 거스름돈이 15원이면 5원짜리 3개를, 거스름돈이 14원이면 5원짜리 2개와 2원짜리 2개로 총 4개를, 거스름돈이 13원이면 5원짜리 1개와 2원짜리 4개로 총 5개를 주어야 동전의 개수가 최소가 된다.
입력
첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다.
출력
거스름돈 동전의 최소 개수를 출력한다. 만약 거슬러 줄 수 없으면 -1을 출력한다.
풀이
동전은 5원과 2원이 있고 최소의 동전을 거슬러 줘야 하므로
5원을 사용할 수 있으면 5원을 많이 사용하는 것이 좋다.
거슬러줄 돈이 5로 나누어진다면 그대로 5로 나눈 몫을 출력해주면 된다.
5로 나누어지지 않는다면
5를 최대한 많이 사용하는 경우부터 사용하지 않는 경우까지 반복문을 순회하며
5로 나눈 나머지가 2로 나누어 떨어지는지 확인하고
그에 따라 5원을 사용한 개수와 2원을 사용한 개수를 더하여 출력하면 된다.
5원과 2원을 사용하여 거슬러줄수 없는 경우는 -1을 출력해주어야 하기 때문에 count의 초기값을 -1로 설정하고
답을 구할 수 있을 때 인위적으로 1을 다시 더해주고 5원의 개수와 2원의 개수를 더해주었다.
import sys
n = int(sys.stdin.readline().rstrip("\n"))
if(n%5==0):
print(n//5)
else:
for i in range(n//5,-1,-1):
count = -1
temp = n-5*i
if(temp%2==0):
count += 1
count+=i
count+=temp//2
break
print(count)
'백준 그리디 알고리즘' 카테고리의 다른 글
파이썬 그리디 알고리즘 백준 9009 피보나치 (0) | 2020.12.14 |
---|---|
파이썬 그리디 알고리즘 백준 8980 택배 (0) | 2020.12.14 |
파이썬 그리디 알고리즘 백준 2212 센서 (0) | 2020.12.14 |
파이썬 그리디 알고리즘 백준 1041 주사위 (0) | 2020.12.13 |
파이썬 그리디 알고리즘 백준 7570 줄 세우기 (0) | 2020.12.12 |