pkuImoogis / study-codingTest

0 stars 0 forks source link

거스름돈 #383

Open geonnho0 opened 8 months ago

geonnho0 commented 8 months ago

문제 링크

geonnho0 commented 8 months ago

dp 배열의 정의는 다음과 같아요.

정의에 따라서 (i, j)일 경우, 먼저 (i, j - 1)일 경우와 값이 같아요.

점화식

코드

class Solution {
    final int MOD = 1000000007;

    public int solution(int n, int[] money) {
        int m = money.length;
        int[][] dp = new int[n + 1][m + 1];
        Arrays.sort(money);
        for (int i = 0; i < m; i++)
            dp[money[i]][i + 1] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                dp[i][j] += dp[i][j - 1];
                int left = i - money[j - 1];
                if (left < 0)
                    continue;
                dp[i][j] = (dp[i][j] + dp[left][j]) % MOD;
            }
        }
        return dp[n][m] % MOD;
    }
}