Computer Science/Algorithm

[리트코드]322. Coin Change

suleesulee 2021. 9. 7. 20:40
class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        dp = [1e9] * (amount + 1)
        dp[0] = 0
        
        for coin in coins:
            for i in range(coin, amount + 1):
                dp[i] = min(dp[i], dp[i - coin] + 1)
                
        return dp[amount] if dp[amount] != 1e9 else -1

사용언어 Python3

난이도    Medium

 

문제풀이과정

해당 문제를 보자마자 Dynamic..아.. DP를 떠올렸다.. 가장 대중적인 DP문제라고 생각한다.

만들어야하는 값을 DP 배열로 만든다. 0은 포함하지 않기에 +1

내가 가진 코인으로 해당 값을 만드는데 최소한의 코인이 몇개 필요한지 구한다.

먼저 1코인으로 값11을 만든다 생각하면 dp 배열은 1,2,3,4....11로 구성될것이다.

다음에 가진 코인이 2코인이라면 값 11을 만들때 dp배열은 1,1,2,2,...6 일 것이고

이것을 가진 코인 모두와 반복시킨다. 그리고 해당 배열의 11번째 값을 반환하고

11번째 값이 초기 값에서 변경된 점이 없다면 -1을 리턴한다.