[๋ฐฑ์ค 1309๋ฒ] ๋๋ฌผ์ - ์๋ฐ์คํฌ๋ฆฝํธ(nodejs)
https://www.acmicpc.net/problem/1309
const { off } = require('process');
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input;
rl.on('line', function (line) {
input = +line;
rl.close();
}).on('close', function () {
const dp = [];
dp[0] = 0;
dp[1] = 3;
dp[2] = 7;
dp[3] = 17;
for (let i = 4; i <= input; i++) {
dp[i] = (dp[i - 1] * 2 + dp[i - 2]) % 9901;
}
console.log(dp[input] % 9901);
});
์ ํ์ ์ธ DP๋ฌธ์ ์ด๋ค. DP๋ฌธ์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ์ด ๋ฎ๊ฑฐ๋, ์ ๋ ฅ๊ฐ์ด ์๋นํ ํฌ๋ค๋ฉด DP๋ฌธ์ ์ธ์ง ํ์ ํด๋ณด์.
N = 0์ผ๋๋ ๋น์ฐํ ์ฌ์๊ฐ ๋ค์ด๊ฐ ๊ณต๊ฐ์ด ์์ผ๋ฏ๋ก 0์ด๋ค.
N = 1์ผ๋๋ 2X1 ๊ณต๊ฐ์ด ์์ผ๋ฏ๋ก
์ฌ์๊ฐ ์๋๊ฒฝ์ฐ => 1
์ฌ์๊ฐ ํ ๋ง๋ผ์ธ ๊ฒฝ์ฐ 2 => 3์ด๋ค.
N = 2์ผ๋๋ 2X2 ๊ณต๊ฐ์ด ์์ผ๋ฏ๋ก
์ฌ์๊ฐ ์๋๊ฒฝ์ฐ => 1
์ฌ์๊ฐ ํ ๋ง๋ฆฌ์ธ ๊ฒฝ์ฐ => 4
์ฌ์๊ฐ 2๋ง๋ฆฌ์ธ ๊ฒฝ์ฐ => 2 => 7์ด๋ค.
N = 3์ผ๋๋ 2X3์ ๊ณต๊ฐ์ด ์์ผ๋ฏ๋ก
์ฌ์๊ฐ ์๋๊ฒฝ์ฐ => 1
์ฌ์๊ฐ ํ ๋ง๋ฆฌ์ธ ๊ฒฝ์ฐ => 6
์ฌ์๊ฐ 2๋ง๋ฆฌ์ธ ๊ฒฝ์ฐ => 8
์ฌ์๊ฐ 3๋ง๋ฆฌ์ธ ๊ฒฝ์ฐ => 2 => 17์ด๋ค.
์ฌ๊ธฐ๊น์ง ๋ณด๋ฉด ์ ํ์์ ์ ์ถํ ์ ์๋ค.
๊ฒฐ๊ตญ 2X3์ ๊ณต๊ฐ์ 2X2์ ๊ณต๊ฐ์ด ์ค๋ณต์์ด 2๊ฐ ๋ค์ด๊ฐ๊ณ 2X1์ ๊ณต๊ฐ์ด ํ๋ ๋ค์ด๊ฐ ์ ์๋ค.
Fun(N) = Fun(N-1)*2 + Fun(N-2) ์ด๋ ๊ฑธ ์ ์ ์๋ค!
%9901์ ์ ์ํ๋ฉฐ ๋ต์ ๋ด๋ฉด ๋์ด๋ค.