[알고리즘]/BOJ

[백준/Pyhton] 14916번: 거스름돈 (그리디 알고리즘)

개발새발주발 2023. 7. 17. 22:41
728x90

1. 문제 

 

14916번: 거스름돈

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

www.acmicpc.net

어렵지 않은 실버5 문제였으나 그리디 알고리즘을 복기하기에 좋은 것 같아 포스팅 해본다 ! 

 

2. 풀이 

그리디는 정말 간단하게 생각해보는게 답인 것 같다. 

우선 받을 수 있는 거스름돈의 동전은 2, 5원이다. 그렇다면 1,3,..등 2,5로만 이루어지지 않는 수는 -1을 출력해주어야한다.

 

1) 우선 5로 나누어보고 5로 나누어떨어지지 않는다면 

2) 2를 감해준다. 그리고다시 1)번으로 되돌아간다. 

 

1) - 2)를 반복해주고 n이 0보다 작다면 불가능한 경우인(-1)을 출력해주고, n==0으로 나누어떨어진다면 답인 (ans)를 출력해준다 ! 

 

3. 코드 

n = int(input())
# 동전의 개수
ans = 0

while (1):
    if n%5 == 0:
        ans+= n//5
        break
    else:
        n-=2
        ans+=1
    # n이 0또는 5의 배수가 아니라면 다시 while문으로 들어감 

# n이 2와 5의 조합으로 나누어 떨어지지 않는 경우
if n<0:
    print(-1)
# n이 2와 5의 조합으로 나누어 떨어지는 경우
else:
    print(ans)