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형으로 계산을 진행해야 정확한 값이 나온다.
'코딩테스트 연습 > DP' 카테고리의 다른 글
[백준] 14501번 퇴사 (JavaScript) (0) | 2024.05.02 |
---|---|
[백준] 9461번 파도반 수열 (JavaScript) (0) | 2024.05.02 |
[백준] 2579번 계단 오르기 (JavaScript) (0) | 2024.04.30 |
[백준] 1003번 피보나치 함수 (JavaScript) (0) | 2024.04.30 |
[백준] 1463번 1로 만들기 (JavaScript) (0) | 2024.04.30 |