알고리즘/DP
[JS] 피보나치 함수 - 백준 1003
슈크림 붕어빵
2023. 12. 21. 12:43
https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
문제
시간복잡도
O(n)
해결방법
dp[i] = ["0 호출 수", "1 호출 수"]로 두고 계산하며 저장한다.
위와 같이 dp[i]의 왼쪽은 dp[i-1], 오른쪽은 dp[i-2]를 호출하므로 0과 1이 호출된 수가 담긴 배열을 그대로 더해주면 된다.
코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./example.txt";
let input = fs.readFileSync(filePath).toString().split("\n");
let max_num = Math.max(...input.slice(1));
let dp = [
[1, 0],
[0, 1],
[1, 1],
];
for (let i = 3; i <= max_num; i++) {
let tmp = [];
tmp[0] = dp[i - 1][0] + dp[i - 2][0];
tmp[1] = dp[i - 1][1] + dp[i - 2][1];
dp[i] = tmp;
}
for (let i = 1; i <= input[0]; i++) {
let tmp = dp[parseInt(input[i])];
console.log(`${tmp[0]} ${tmp[1]}`);
}