Algorithm
[백준] 13699 점화식(JS)
createElement
2022. 8. 19. 15:02
13699번: 점화식
다음의 점화식에 의해 정의된 수열 t(n)을 생각하자: t(0)=1 t(n)=t(0)*t(n-1)+t(1)*t(n-2)+...+t(n-1)*t(0) 이 정의에 따르면, t(1)=t(0)*t(0)=1 t(2)=t(0)*t(1)+t(1)*t(0)=2 t(3)=t(0)*t(2)+t(1)*t(1)+t(2)*t(0)=5 ... 주어진 입력 0 ≤ n
www.acmicpc.net
문제는 주어진 점화식을 코드로 작성하는 간단한 문제였으나 3번이나 틀렸다.
결과값의 범위를 생각하지 않아서 틀린 거였다...
모든 값을 BigInt로 계산하니 드디어 정답..!
BigInt - JavaScript | MDN
**BigInt**는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체입니다.
developer.mozilla.org
BigInt로 변환하려면
1) 정수값 뒤에 n을 붙이거나 (예: 8n)
2) 함수 BigInt()를 호출해 변환할 수 있다. (예: BigInt(8))
또한, BigInt를 문자열로 변환하기 위해 toString() 메서드를 이용했다.
function solution(input) {
let dp = Array.from({ length: input + 1 }, () => 0);
dp[0] = 1n;
dp[1] = 1n;
for (let i = 2; i <= input; i++) {
let sum = 0n;
for (let j = 0; j < i; j++) {
sum += BigInt(dp[j]) * BigInt(dp[i - j - 1]);
}
dp[i] = sum;
}
return dp[input].toString();
}
console.log(solution(3)); // 5
console.log(solution(25)); // 4861946401452