Algorithm/백준
[백준] 9095 - 1,2,3 더하기 (Javascript / node)
jinseoit
2023. 11. 7. 03:19
문제
https://www.acmicpc.net/problem/9095
9095번: 1, 2, 3 더하기
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
www.acmicpc.net
풀이
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
const T = Number(input[0]);
const dp = [1,2,4]
const getCount = (num) => {
for(let i =0; i<num;i++){
if(dp[i]) continue;
dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
}
return dp[num-1]
}
for(let i =1; i<=T; i++){
console.log(getCount(Number(input[i])));
}
일정한 규칙이 있는 DP문제이다.
- 1일때는 1가지 밖에 없으니 dp[0] = 1
- 2일때는 1+1, 2 총 두가지로 dp[1] = 2
- 3일때는 1+1+1, 1+2, 2+1, 3 으로 총 네가지로 dp[2] = 4
어느정도 규칙이 보인다
- 4일때는 1+1+1+1 , 1+1+2, 1+2+1, 2+1+1, 2+2, 1+3, 3+1 일곱가지로 dp[3] = 7
- 보이는 교칙은 구하는 숫자의 가짓수는 이전 숫자들의 가짓수들 합과 같다.
점화식을 도출해 보면 dp[i] = dp[i-1] + dp[i-2] + dp[i-3] 이 나온다.