๋ฌธ์ ๋งํฌ
์ฝ๋ฉํ ์คํธ ์ฐ์ต - 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];
}
'์ฝ๋ฉํ ์คํธ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript] ์ค ์๋ ๋ฐฉ๋ฒ (12936) (0) | 2022.06.25 |
---|---|
[Javascript] ์ ํ์ ์๊ฐ ์ด๋ (12980) (0) | 2022.06.25 |
[Javascript] ํ๋ณด๋์น ์ (12945) (0) | 2022.06.25 |
[Javascript] ํ๋ ธ์ด์ ํ (12946) - fail (0) | 2022.06.24 |
[Javascript] [3์ฐจ] ์์ถ (17684) (0) | 2022.06.24 |