문제 링크
https://www.acmicpc.net/problem/2748
풀이
const n = +require('fs').readFileSync('/dev/stdin').toString().trim();
const dp = Array(n + 1).fill(BigInt(0));
dp[1] = BigInt(1);
for (let i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
console.log(dp[n].toString());
피보나치 수 문제와 풀이는 동일하나, 주어지는 n의 최댓값의 차이로 인해 자바스크립트에서 나타낼 수 있는 가장 안전한 최대 크기의 정수인 Number.MAX_SAFE_INTEGER(2^53 - 1)보다 큰 수가 dp에 저장되면서 정확하지 않은 수가 입력될 수 있다.
따라서, BigInt를 사용한 연산을 통해 정확한 값을 얻어내야 한다.
마지막에 출력할 때 BigInt의 리터럴의 마지막에 알파벳 n이 붙기 때문에, 문자열로 변환하여 출력하였다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 17218 - Node.js] 비밀번호 만들기 (0) | 2022.03.29 |
---|---|
[백준 10994 - Node.js] 별 찍기 - 19 (0) | 2022.03.28 |
[백준 3036 - Node.js] 링 (0) | 2022.02.13 |
[백준 1744 - Node.js] 수 묶기 (0) | 2021.12.06 |
[백준 1339 - Node.js] 단어 수학 (0) | 2021.12.06 |