본문 바로가기
DEV/알고리즘 문제 풀이

[백준] 2748, 10870 - 피보나치 문제 풀기

by krokerdile 2025. 1. 20.
728x90

2748번 

const fs = require('fs');
const filePath = process.platform === 'linux' ? 'dev/stdin' : '../input.txt';
const input = fs.readFileSync(filePath).toString().trim().split('\n');

let N = parseInt(input[0]);
let list = [0, 1, 1];

for (let i = 3; i <= N; i++) {
  list[i] = BigInt(list[i - 1]) + BigInt(list[i - 2]);
}

console.log(String(list[N]));

10870번

const fs = require('fs');
const filePath = process.platform === 'linux' ? 'dev/stdin' : '../input.txt';
const input = fs.readFileSync(filePath).toString().trim().split('\n');

let N = parseInt(input[0]);

function fibonacci(n) {
  if (n === 0) return 0;
  if (n === 1) return 1;
  return fibonacci(n - 1) + fibonacci(n - 2);
}

console.log(fibonacci(N));

그리디를 지난주 내내 쭉 풀다가 추천 문제를 거의 다 풀어서 DP 문제 풀이로 넘어왔습니다. Dynamic Programming 문제들은 이전 값을 기록해두고 계속해서 사용하는 것이 특징이라는 것을 염두해두고 풀려고 했습니다.

10870번 같은 경우에는 단순하게 이전 값을 재귀적으로 받아와서 사용을 해주면 됐습니다.

2748번 같은 경우에는 재귀적으로 함수를 만들어서 해도 되고 배열에 값을 넣어줘도 되겠다라고 생각했습니다. 10870번 문제를 풀면서 재귀적으로 풀었으니 이번에는 배열로 풀어봐야 겠다고 생각했습니다. 이정도면 충분하겠지라고 생각하고 답을 제출했는데 계속 틀리길래 뭔가 했는데 N <= 90 까지 라는 조건이 있어서 자바스크립트에서 다루는 숫자값을 넘겠구나 라고 생각해서 BinInt를 적용하니 바로 해결이 되었습니다. 

728x90