본문 바로가기
백준/그리디

[백준] #14916 거스름돈 (python)

by 똥먹는낙타 2022. 2. 15.
728x90
반응형

14916번: 거스름돈 (acmicpc.net)

 

14916번: 거스름돈

첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다.

www.acmicpc.net

 

문제

춘향이는 편의점 카운터에서 일한다.

손님이 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을 출력한다.

 

예제 입력1

13

예제 출력1

5

 

예제 입력2

14

예제 출력2

4

 


 

# Code

n = int(input())
count = 0

while n>0:
    if n%5==0:
        count+=n//5
        break
    
    n-=2
    count+=1

if n<0:
    print(-1)
else:
    print(count)

# Comment

아무생각없이 풀었다가 13 입력했을 때 -1 나와버려서 당황했는데, 13 같은 경우를 제대로 고려해주지 못했었다.

방법이 잘 생각이 안났는데.. 이렇게 쉬운 루트가 있었다니..

 

n 값이 양수일 동안 반복문을 진행한다.

n이 5의 배수라면 count에 5로 나눈 몫을 더하고 반복문을 빠져나온다.

만약 5의 배수가 아니라면, 일단 n을 2씩 빼면서 count++ 해준다.

만약에 2를 계속 빼다가 5의 배수가 되면 count에 5로 나눈 몫을 더하고 반복문을 빠져나올 것이고, 9와 같이 끝까지 5로 나누어지지 않는 수 같은 경우엔 결국 -2가 반복되면서 음수가 되어 반복문을 빠져나오게 될 것이다.

마지막으로 n이 음수인지 아닌지를 체크해서 각각 -1과 count를 출력해준다.

 

** 틀린 코드 **

n = int(input())
count = 0

while n>0:
    if n%5==0:
        count+=n//5
        print(count)
        break
    
    n-=2
    count+=1

if n<0:
    print(-1)

처음에 이렇게 짰다가 틀렸는데.. 왜 틀리다고 나오는지 사실 잘 모르겠다. 지금 머리가 안돌아가기 때문에.. ㅎㅎ (미라클 모닝 때문에 새나라의 어린이가 되어버렸다.. 낮잠도 낮잠대로 자고.. 새벽에 일찍 졸음이 쏟아진다... 이거.. 좋은거 맞나?) 자고 일어나서 다시 생각해보려고 한다.

728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

[백준] #13305 주유소 (python)  (3) 2022.02.18
[백준] #2217 로프 (python)  (0) 2022.02.18
[백준] #1439 뒤집기 (python)  (0) 2022.02.16
[백준] #1343 폴리노미오 (python)  (0) 2022.02.16
[백준] #21313 문어 (python)  (0) 2022.02.15

댓글