๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/LeetCode

[LeetCode] Combination Sum IV

๋ฌธ์ œ๋งํฌ

 

์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด nums์˜ ์š”์†Œ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ target์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
๊ฐ ์š”์†Œ๋“ค์€ ์ค‘๋ณต์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ˆœ์—ด ๋ฐฉ์‹์„ ๋”ฐ๋ฅธ๋‹ค. (1,3)๊ณผ (3,1)์„ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋กœ ๋ด„

์ ‘๊ทผ ๋ฐฉ๋ฒ•

์ „ํ˜•์ ์ธ dp๋ฌธ์ œ๋กœ ์ด๋ฒˆ dp์˜ ํ•ต์‹ฌ์€ dp[n] => n์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ž€ ์ ์ด๋‹ค.

1 ~ target๊นŒ์ง€ dp[n]์„ ๊ตฌํ•˜๊ณ  (dp[1] === 1์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜, dp[2] === 2๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜...)

๋งŒ์•ฝ dp[5]๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ ํ˜„์žฌ num์€ 2์ด๊ณ , dp[3]์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด 3๊ฐœ๋ผ๋ฉด 
dp[5] += dp[5 - 2] ๋ผ๋Š” ๊ฐœ๋…์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ ์ด๋‹ค. (dp[3]์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด 3๊ฐœ๊ณ , ํ˜„์žฌ num์€ 2์ด๋ฏ€๋กœ dp[5]์—๋„ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค.)


for(let curTarget = 1; curTarget <= target; curTarget++){
    for(let num of nums){
        if((curTarget - num) >= 0){
            if(curTarget === num){
                dp[curTarget] += 1;
            }else{
                dp[curTarget] += dp[curTarget - num];
            }
        }
    }
}โ€‹

์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

curTarget์€ 1 ~ target๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉฐ ํ˜„์žฌ ๊ฐ’์„ target์ด๋ผ ์ƒ๊ฐํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์˜ ๋ณ€์ˆ˜์ด๊ณ 

curTarget์ด nums์˜ ์›์†Œ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ๋‹ค์Œ for๋ฌธ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

๋˜ํ•œ dp[curTarget]์ธ ๊ฒฝ์šฐ๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ 1์„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ ,
์•ž์„œ ์‚ดํŽด๋ณธ๋Œ€๋กœ ๋งŒ์•ฝ curTarget - num >= 0์ด๊ณ , curTarget !== num์ธ ๊ฒฝ์šฐ dp[curTarget] += dp[curTarget - num]์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. 

 

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var combinationSum4 = function(nums, target) {
    const dp = new Array(target + 1).fill(0);
    dp[0] = 0;
    
    for(let curTarget = 1; curTarget <= target; curTarget++){
        for(let num of nums){
            if((curTarget - num) >= 0){
                if(curTarget === num){
                    dp[curTarget] += 1;
                }else{
                    dp[curTarget] += dp[curTarget - num];
                }
            }
        }
    }
    return dp[target]
};

'์ฝ”๋”ฉํ…Œ์ŠคํŠธ > LeetCode' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[LeetCode] Reduce Array Size to The Half  (0) 2022.08.18
[LeetCode] Unique Morse Code Words  (0) 2022.08.17
[LeetCode] My Calendar I  (0) 2022.08.03
[LeetCode] Kth Smallest Element In A Sorted Matrix  (0) 2022.08.02
[LeetCode] Unique Paths  (0) 2022.08.01