BOJ-Algorithm
백준 11047 - 동전 0
bellhundred
2022. 1. 10. 22:57
https://www.acmicpc.net/problem/11047
11047번: 동전 0
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
www.acmicpc.net
N, K = map(int, input().split())
arr = []
for i in range(N):
arr.append(int(input()))
count = 0
for money in arr[::-1]:
if K==0:
break
if K//money > 0:
count+=K//money
K = K%money
print(count)
그리디 알고리즘 문제다.
내가 가진 돈의 단위들 중 큰 것부터 차례대로 입력받을 K값과 비교해서, 내 돈으로 K값을 나눌 수 있는 범위부터 순차적으로 연산을 수행한다.
이를 테면
10 4200
1
5
10
50
100
500
1000
5000
10000
50000
의 연산이 있다고 할 때,
4200원은 50000원,10000원,5000원으로는 표현할 수 없으므로 이것들은 그냥 지나가면 되고
1000원인 경우 4200원 중 4000원을 표현할 수 있으므로 4200//1000인 4를 count에 집어넣은 뒤
표현하지 못하는 200원만 K값에 남겨서 다시 반복문 연산을 수행한다.
이후 500원으로는 200원을 표현할 수 없으므로 다시 지나가게 되고
100원인 경우 200원 모두를 표현할 수 있으므로 200//100인 2을 count에 집어넣는다.
각 연산이 끝날 때마다 K값이 0인 경우는 break해서 n//0 과 같은 ZeroDivisionError를 발생시키지 않도록 한다.
이후 count 값을 출력한다.
실버 4 달성!