DP 문제입니다.
동전 1과는 조금 다른 방식으로 접근해야합니다.
lst는 처음에 꼭 정렬해주어야 올바른 답이 나옵니다.
왜냐하면 바텀업 방식이라서 작은 숫자부터 시작하기 때문입니다.
- k 의 범위가 10000까지 이므로 d는 10001로 초기화 해주고
k가 각 동전의 단위라면 최솟값은 1이므로 d[0] = 1 입니다.
- k가 동전의 단위로 나누어진다면
k를 동전의 단위로 나눈 몫과 d[k]의 값 중 min 값을 갱신해줍니다.
2.k가 동전의 단위로 나누어지지 않는다면
d[k]와 d[j-k]의 값 중 min 값으로 갱신해준다.
n, k = map(int, input().split())
lst = []
for i in range(n):
lst.append(int(input()))
lst.sort()
d = [10001] * (k+1)
d[0] = 1
for i in lst:
for j in range(i, k+1):
if j >= i:
if j % i == 0:
d[j] = min((j // i), d[j])
else:
d[j] = min(d[j], d[j-i]+1)
if d[k] == 10001:
print(-1)
exit()
print(d[k])