BOJ[10844] - 쉬운 계단 수 by JavaScript
쉬운 계단 수
문제
언어
- JavaScript
문제 풀이 step 1
- dp[n] = 길이가 n인 계단 수의 총 개수
- DP의 특징인 작은 문제의 해답으로부터 큰 문제의 해답을 찾는다를 이용합니다.
- 계단 수는 0 ~ 9의 수로 이루어져 있습니다.
- 그렇다면 계단 수의 맨 뒤에는 0 ~ 9 즉, 10개의 수로만 구성됩니다. 경우의 수는 10가지입니다. (계단 수는 인접한 모든 자리수의 차이가 1입니다.)
- 길이가 n이고, 뒤에 0이 오는 계단 수 : dp[n][0] = dp[n-1][1]
- 길이가 n이고, 뒤에 1이 오는 계단 수 : dp[n][1] = dp[n-1][0] + dp[n-1][2]
- …
- 길이가 n이고, 뒤에 9가 오는 계단 수 : dp[n][9] = dp[n-1][8]
- 마지막 단계의 바로 한 단계의 전을 고려해서 점화식을 뽑아냅니다.
소스 코드
const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
const solution = (input) => {
const N = parseInt(input[0]);
const MOD = 1000000000;
const dp = Array.from({length: N + 1}, () => []);
// BASE
dp[1][0] = 0;
for (let i = 1; i < 10; i++) {
dp[1][i] = 1;
}
for (let i = 2; i < N + 1; i++) {
dp[i][0] = dp[i - 1][1] % MOD;
dp[i][9] = dp[i - 1][8] % MOD;
for (let j = 1; j < 9; j++) {
dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j + 1]) % MOD;
}
}
let sum = 0;
for (let i = 0; i < 10; i++) {
sum += dp[N][i];
sum %= MOD;
}
return sum;
};
console.log(solution(input));