문제
춘향이는 편의점 카운터에서 일한다.
손님이 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원의 개수가 가능한 많아야 한다
그리디하게 생각하면 될 것 같다
1. 5원의 개수를 저장할 변수를 0부터 1씩 증가시킨다
2. n-(저장한 변수*5)가 2로 나누어 떨어진다면 2로 나눈 몫을 2원의 개수 변수에 저장한다
3. 5원으로만 가득 채워서 거스름돈을 넘어갈때까지 1-2번을 반복한다
# 거스름돈
import sys
input = sys.stdin.readline
n = int(input())
five = 0
two = 0
cnt = 0
while cnt*5 <= n:
if (n-cnt*5)%2==0:
five = cnt
two = (n-five*5)//2
cnt += 1
ans = five+two
print(ans if ans != 0 else -1)
11와 같은 수는 2와 5의 조합으로 채울 수 없기에 -1출력 예외처리 해주면 된다
'알고리듬 > Greedy' 카테고리의 다른 글
[백준 2212] 센서 (1) | 2024.11.15 |
---|---|
[백준 31926] 밤양갱 (1) | 2024.11.14 |
[백준 2847] 게임을 만든 동준이 (0) | 2024.11.12 |
[백준 13417] 카드 문자열 (0) | 2024.11.12 |
[백준 27961] 고양이는 많을수록 좋다 (0) | 2024.11.09 |