문제 요약
입력
10
출력
55
문제 분석
문제 설계
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim();
const n = Number(input);
const dp = Array.from({ length: 91 }, () => 0n);
dp[1] = 1n;
for (let i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
console.log(dp[n].toString());
배열 전체를 BigInt로 초기화하기 Array.from BigInt
const n = Number(input);
const dp = Array.from({ length: 91 }, () => 0n);
dp[1] = 1n;
// e.g) js의 리터럴 표기법
// BigInt는 같은 타입끼리만 산술 연산이 가능하다.
BigInt: 123n, 456n
배열 dp를 이용해 동적 계획법(Dynamic Programming) 으로 접근 for 문
for (let i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
for 문으로 접근한다.출력 toString()
console.log(dp[n].toString());
BigInt 타입은 출력할 때 문자열로 변환해야한다. 그렇지 않으면 n 뒤에 n 이 포함된 형식(123n)으로 출력된다.결론
로직은 맞게 접근했으나, 큰 수 처리에 대한 고려를 하지않아 처음에 계속 틀렸었다. 로직에 대한 타입의 이해도 또한 중요하다.