[Algorithm] programmers-12907-๊ฑฐ์Šค๋ฆ„๋ˆ.java

ยท

1 min read

/*dp?*/
class Solution {
    public int solution(int n, int[] money) {
        long[] dp = new long[n+1];

        //์ดˆ๊ธฐํ™”
        dp[0] = 1;

        for(int i=0;i<money.length;i++){
            int currency = money[i];
            for(int j = currency;j<=n;j++){
                dp[j] += dp[j-currency]; 
            }
        }

        /* 
        ์ค‘๋ณต๊นŒ์ง€ ์„ธ๋ฒ„๋ฆฌ๋Š” ์ฝ”๋“œ. ์˜ˆ๋ฅผ๋“ค์–ด money = [1,2,5] ์ผ๋•Œ n=3 ์ด๋ผ๋ฉด
        (1,2) (2,1)์ด ์ค‘๋ณต์œผ๋กœ ์„ธ์–ด์ ธ์„œ ๋‹ต์ด 1์ธ๋ฐ 2๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค.
        */
        // for(int i=0;i<=n;i++){
        //     for(int j=0;j<money.length;j++){
        //         int currency = money[j];
        //         if(i-currency > 0){
        //             dp[i] += dp[i-currency];
        //         }
        //     }
        // }

        int answer = (int)(dp[n] % 1000000007);
        return answer;
    }
}
  • ์ฒ˜์Œ์— ๋ณผ ๋•Œ dp๋ฅผ ๋– ์˜ฌ๋ ธ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง„ ok์ง€๋งŒ... ์ค‘๋ณต๊นŒ์ง€ ์„ธ์–ด๋ฒ„๋ ค์„œ ์˜ˆ์ œ์˜ ๋‹ต์ด 9๊ฐ€ ๋‚˜์™€๋ฒ„๋ ธ๋‹ค.

  • ์–ด๋–ป๊ฒŒ ํ• ๊นŒ ๊ณ ๋ฏผ์„ ํ•˜๋˜์ค‘์— ๋– ์˜ฌ๋ฆฐ ๋ฐฉ๋ฒ•์ด ๋‹คํ–‰ํžˆ ๋งž์•˜๋‹ค.

  • ์šฐ์„  dp๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  money๋ฐฐ์—ด์˜ ํ†ตํ™”(currency)ํ•˜๋‚˜์”ฉ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    • ๋ฌธ์ œ์˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๋ฉด money = [1,2,5]์ด๊ณ  n=5๋‹ˆ๊นŒ money๊ฐ€ 1์ผ๋•Œ dp[j] += dp[j-currency]; ์ ํ™”์‹์— ๋Œ€์ž…ํ•˜๋ฉด ๋‚˜๋ณด๋‹ค 1์› ์ ์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ˜„์žฌ dp[j]์— ๋ˆ„์ ์‹œํ‚ค๋Š” ๊ฒƒ.

    • n=2์ผ๋•Œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด dp[j] += dp[j-2] ๋ฅผ ํ•ด์ฃผ๋ฉด๋œ๋‹ค. j์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์— j๋ณด๋‹ค 2์› ์ ์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด 1์›์งœ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฑฐ์Šค๋ฆ„๋ˆ ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ 2์›์งœ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฑฐ์Šค๋ฆ„๋ˆ ๊ฒฝ์šฐ๋ฅผ ํ•ฉ์นœ ๊ฒƒ ๊นŒ์ง€ ๊ณ„์‚ฐ๋œ๋‹ค.

    • n=5 ์ผ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ dp[j] += dp[j-5]๋ฅผ ๋ˆ„์ ์‹œํ‚จ๋‹ค.

ย