알고리즘
[백준/파이썬] #2294
룰루루
2025. 3. 19. 20:32
오늘도 30분 안에 풀었다!
동전으로 금액 만들기는 DP 단골 유형이라 대강의 풀이 방법이 생각난 덕이 컸다.
n, k = map(int, input().split())
coins = []
for _ in range(n):
coin = int(input())
if coin not in coins:
coins.append(coin)
coins.sort()
DP = [1e9] * (k+1)
smallest_coin = min(coins)
largest_coin = max(coins)
for i in range(smallest_coin, k+1):
if i <= largest_coin:
if i in coins:
DP[i] = 1
continue
for coin in coins:
if coin > i:
break
DP[i] = min(DP[i], DP[i-coin] + 1)
DP[k] = -1 if DP[k] == 1e9 else DP[k]
print(DP[k])