해당 포스팅은 백준 15988번 1,2,3 더하기 3 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였다.
T
n
이 주어진다. (1 <= n <= 1,000,000
)각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
이 문제는 백준의 1,2,3 더하기 풀이와 n의 범위만 다르다. 이전 문제와 동일하므로 전반적인 풀이 과정은 생략하겠다.
1,2,3 더하기 풀이는 이전 포스팅을 참고하자. 1,2,3 더하기 풀이
n이 1,000,000 이하 양수이므로 재귀로는 절대 풀 수 없다. 따라서 반복문을 이용해 풀자.
memo
를 구하자.memo[n]
을 출력해준다.const input = require('fs').readFileSync('/dev/stdin').toString().split("\n");
const [T, ...test] = input;
let maxCase = dp(Math.max(...test));
function dp(n, memo=[0,1,2,4]){
if(n <= 4){
return memo[n-1];
}
let i = 4;
while(i <= n){
memo[i] = (memo[i-1] + memo[i-2] + memo[i-3])%1000000009;
i++;
}
return memo;
}
const answer = [];
test.map(el => {
answer.push(maxCase[el]);
})
console.log(answer.join("\n"));