coins
-> 동전 종류amount
-> total 금액가능한 금액 = 이미 가능한 금액 + 동전하나 사용
이라는 점을 명심class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
if amount > 0:
maxi = 10**4+1
dp = [maxi for _ in range(amount+1)]
dp[0] = 0
new_coin = []
for coin in coins:
if coin <= amount:
new_coin.append(coin) # amount 보다 큰 동전으로는 불가능 -> 거르기
if new_coin:
for target in range(min(new_coin), amount+1):
for coin in new_coin:
# 갖고 있는 동전 하나
if dp[target-coin] < maxi:
# (현재 금액 - 동전 하나)가 이미 가능한 금액이면
dp[target] = min(dp[target], dp[target-coin]+1) # 최솟값일 시 갱신
if dp[amount] == maxi:
return -1
else:
return dp[amount]
else:
return 0
시간제한 때문에 고생 좀 했다.
dp 라면 이렇게 전에 만든 금액 + 현재 동전
으로 접근하는게 맞는 것 같은데
처음에는 브루트포스 마냥 이전에 만든 모든 금액을 이용해보려 해서 시간이 오래걸렸던 것 같다.
다까먹엇네,,^^,,,,