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

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Javascript] 3 x n ํƒ€์ผ๋ง (12902)

๋ฌธ์ œ๋งํฌ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - 3 x n ํƒ€์ผ๋ง

 

programmers.co.kr

 

์ ‘๊ทผ ๋ฐฉ๋ฒ•

2 * n ํƒ€์ผ๋ง์€ ๊ทœ์น™์ด ๋ˆˆ์— ๋ณด์—ฌ์„œ ์‰ฝ๊ฒŒ dp๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ..

3 * n ์ด ๋˜๋‹ˆ ๊ทœ์น™์ด ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์•˜๋‹ค.

๊ทธ๋ž˜์„œ ๋”ฑ n์ด 10์ผ๋•Œ๊นŒ์ง€๋งŒ ์ฐธ๊ณ ํ•˜์—ฌ ๊ทœ์น™์„ ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ (3, 11, 41, 153, 571...)
dp[num] = dp[num-1] * 3 + (dp[num-1] - dp[num-2]) ๋ผ๋Š” ๊ณต์‹์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹จ์ˆœํžˆ dp[num] = (dp[num-1] * 3 + (dp[num-1] - dp[num-2])) % 1000000007์„ ์ ์šฉํ•ด ๋ดค๋Š”๋ฐ
ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

๊ณต์‹์— - ๊ฐ€ ์žˆ์–ด์„œ dp[num] < dp[num-1] ์ธ ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
(dp[num] > 1000000007์ด๊ณ  dp[num-1] < 1000000007 ์ธ ๊ฒฝ์šฐ dp[num] < dp[num-1]์ด ๋จ)

์ด๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ dp[num] + 1000000007 ์ ์šฉํ•˜์—ฌ ๋‹ค์Œ ๊ณ„์‚ฐ์— ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
dp[num] = tmpVal > 0 ? tmpVal % 1000000007 : tmpVal + 1000000007;โ€‹


function solution(n) {
    var answer = 0;
    const dp = Array.from({length : (n/2)+1}, () => 0);
    dp[1] = 3;
    dp[2] = 11;
    
    for(let num = 3; num <= n/2; num++){
        let tmpVal = (dp[num-1] * 3) + (dp[num-1] - dp[num-2]);
        dp[num] = tmpVal > 0 ? tmpVal % 1000000007 : tmpVal + 1000000007;
    }
    
    return dp[n/2];
}