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]}`);
}
'알고리즘 > DP' 카테고리의 다른 글
[JS] 부녀회장이 될테야 - 백준 2775 (1) | 2023.12.21 |
---|---|
[JS] 1, 2, 3 더하기 - 백준 9095 (0) | 2023.12.21 |
[JS] 연속합 - 백준 1912 (0) | 2023.12.21 |
[JS] 2×n 타일링 2 - 백준11727 (1) | 2023.12.21 |
[JS] 2×n 타일링 - 백준 11726 (0) | 2023.12.21 |