다이나믹 프로그래밍 문제다.
d[n] = n원을 만들기 위해 사용하는 동전의 최소 개수로 두고 짰다.
k원을 만들기 위해 필요한 동전 수는 d[k]가 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import sys
n, k = map(int, sys.stdin.readline().split())
coin = []
for i in range(n):
coin.append(int(sys.stdin.readline()))
coin.sort()
d = [0]*(k+1)
for i in range(coin[0], k+1):
temp = []
if i in coin:
d[i] = 1
else:
for j in coin:
if i-j >= coin[0]:
if d[i-j] != -1:
temp.append(d[i-j]+1)
if len(temp) >0:
d[i] = min(temp)
else:
d[i] = -1
print(d[k])
|
'Python > 알고리즘' 카테고리의 다른 글
트리 순회 (백준 1991, 파이썬) (0) | 2019.09.06 |
---|---|
트리의 높이와 너비 (백준 2250, 파이썬) (0) | 2019.09.06 |
알고스팟 (백준 1261, 파이썬) (0) | 2019.08.31 |
이모티콘 (백준 14226, 파이썬) (0) | 2019.08.31 |
보석 도둑 (백준 1202, 파이썬) (0) | 2019.08.21 |