2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
ex)
input:
9
output:
55
아이디어
시간복잡도
자료구조
//DP
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on("line", function (line) {
input.push(line);
}).on("close", () => {
/*
1. 아이디어
- 점화식 : An = An-1 + An-2
- N값을 구하기 위해, for문 3부터 N까지의 값을 구하기
- 이전값, 이전이전값 더해서, 10007로 나눠 저장
2. 시간복잡도
- O(N)
3. 자료구조
- DP값 저장하는 (경우의수) 배열 : int[]
- 최대값 : 10007 보다 작음
*/
const n = parseInt(input[0]);
const res = [0, 1, 2];
for (let i = 3; i <= n; ++i) {
res.push((res[i - 1] + res[i - 2]) % 10007);
}
console.log(res[n]);
});