Post

leetcode(리트코드)3월11일 challenge322-Coin Change

leetcode(리트코드)3월11일 challenge322-Coin Change

leetcode March 11일 - Coin Change 문제입니다.

1. 문제

https://leetcode.com/problems/coin-change/


2. Input , Output


3. 분류 및 난이도

Medium 난이도입니다.
3월 11일자 챌린지 문제입니다.


4. 문제 해석

  • 대표적인 DP문제입니다. 주어진 coins을 최소한 사용하여 amount를 만들어야합니다. 만들 수 없으면 -1을 리턴합니다.

5. code

python

1
2
3
4
5
6
7
8
9
10
class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        coins.sort()
        dp = [987654] * (amount+1)
        dp[0] = 0
        for i in range(1,amount+1):
            for j in range(len(coins)):
                if coins[j] <= i:
                    dp[i] = min(dp[i],dp[i-coins[j]]+1)
        return -1 if dp[amount] == 987654 else dp[amount]

c++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        sort(coins.begin(),coins.end());
        int* dp = new int[amount+1];
        dp[0]=0;
        for(int i =1;i<amount+1;++i)
            dp[i]= 987654;
        
        for(int i =1;i<=amount; ++i)
        {
            for(int j = 0; j<coins.size();++j)
            {
                if(coins[j]<=i)
                    dp[i] = min(dp[i], dp[i -coins[j]] +1 );
            }
        }
        return dp[amount] == 987654 ? -1 : dp[amount];
    }
};

6. 결과 및 후기, 개선점

c++ 94% python 40%

python 개선한 코드들이 너무 보기 어려워서 추가하지 않겠습니다.

This post is licensed under CC BY 4.0 by the author.