입력 | 출력 |
---|---|
3 15 1 5 12 | 3 |
: 동전의 개수를 최소로 하며 가치가 k가 되도록 만드는 것이므로 bfs로 풀 수 있다.
dp를 이용해서 풀 수 있음.
dp의 각 수는 매우 큰 수인 1e9로 초기화, dp[0] = 0.
입력받은 코인에 대해서,
dp[i번째-코인]+1과 dp를 비교해서 저장.
dp는 점화식 떠올리는게 정말 어려운 것 같다..
from collections import deque
import sys
def bfs():
while q:
x = q.popleft()
if x == k:
return visited[x]
for c in coin:
nx = x + c
if nx <= k:
if visited[nx] == 0:
visited[nx] = visited[x]+1
q.append(nx)
return -1
n, k = map(int, sys.stdin.readline().split())
coin = {int(sys.stdin.readline()) for _ in range(n)}
visited = [0]*(k+1)
q = deque()
for c in coin:
if c <= k:
q.append(c)
visited[c] = 1
print(bfs())
import sys
n, k = map(int, sys.stdin.readline().split())
coin = [int(sys.stdin.readline()) for _ in range(n)]
dp = [1e9]*(k+1)
dp[0] = 0
coin.sort()
for c in coin:
for i in range(c, k+1):
dp[i] = min(dp[i-c]+1, dp[i])
print(dp[k]) if dp[k] != 1e9 else print(-1)