본문 바로가기
코딩테스트 연습/DP

[백준] 2193번 이친수(JavaScript)

by eddypark 2024. 5. 2.

https://www.acmicpc.net/problem/2193

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

let N = input.shift();
let answer = [0, 1, 1];

for (let i = 3; i <= 90; i++) {
  answer[i] = BigInt(answer[i - 1]) + BigInt(answer[i - 2]);
}
console.log(String(answer[N]));

 

규칙을 찾기 위해 이친수를 구해보았다.

N = 1 --> 1

N = 2 --> 1

N = 3 --> 2

N = 4 --> 3

N = 5 --> 5

 

누가봐도 피보나치 점화식이다. 따라서 90번째 까지 배열을 채워준 뒤 입력 값을 받아 출력한다.

하지만 여기서 주의해야할 점이 있다.

Number로 하게되면 최대 정수의 값은 2^53이다. 즉, N이 커질수록 정확하지가 않다.

따라서 BigInt형으로 계산을 진행해야 정확한 값이 나온다.