본문 바로가기
알고리즘/DP

[JS] 피보나치 함수 - 백준 1003

by 슈크림 붕어빵 2023. 12. 21.

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