알고리즘(백준)/그리디
[알고리즘/그리디] 14916번 : 거스름돈 - python
되다
2024. 1. 2. 17:43
링크 : https://www.acmicpc.net/problem/14916
14916번: 거스름돈
첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다.
www.acmicpc.net
- 문제
- 소요시간: 7분 35초
- 설계하기(접근방법)
1. 입력받기
거스름돈을 입력받는다
2. 구현하기
수학적으로 접근했다. 둘의 최소공배수인 10을 넘어가는 경우, 거스름돈을 거슬러주지 못하는 경우는 없으므로 10 아래의 경우의 수만 고려해서 while문을 돌렸다.
1,3 인 경우 거슬러줄 수 없고
2,4,6,8인 경우 각각 1,2,3,4,를 몫으로 동전 개수에 더해준다
5, 7, 9 혹은 그 이상은 while문으로 반복하면서 개수를 구할 수 있다
3. 출력하기
동전의 개수를 출력한다
- 코드(출력)
n = int(input())
cnt = 0
while True:
if n == 1 or n == 3:
cnt = -1
break
if n == 8:
cnt += 4
break
if n == 6:
cnt += 3
break
if n == 4:
cnt += 2
break
if n == 2:
cnt += 1
break
if n == 0:
cnt += 0
break
n -= 5
cnt += 1
print(cnt)
더 좋은 코드
n= int(input())
cnt = 0
while n > 0:
if n % 5 == 0 :
cnt += (n //5)
break
n -= 2
cnt += 1
if n < 0 :
print(-1)
else:
print(cnt)
- 얻어갈 부분
1. greedy로 5로 나누어질 때까지 2를 빼주고, 나누어지면 cnt를 출력하고
만약 나누어지지 않는다면 -1로 출력하는 방법을 사용하면 좀 더 코드를 간결하게 짤 수 있다