45656이란 수를 보자.
이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다.
N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다.
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
const fs = require('fs');
const N = fs.readFileSync('/dev/stdin').toString().trim() * 1;
let numCount = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1];
let nextCount = new Array(10).fill(0);
for (let i = 2; i <= N; i++) {
for (let k = 0; k < numCount.length; k++) {
if (k === 0) nextCount[k] = numCount[1];
else if (k === 9) nextCount[k] = numCount[8];
else {
nextCount[k] = (numCount[k - 1] + numCount[k + 1]) % 1_000_000_000;
}
}
numCount = [...nextCount];
}
console.log(numCount.reduce((acc, value) => acc + value) % 1_000_000_000);
numCount 는 해당 수의 맨 뒷자리 숫자를 카운트한 배열이다.
이전 수의 맨 뒷자리 수가 3인 경우
다음 수의 맨 뒷자리수는 2 또는 4가 된다.이전 수가 1인 경우 맨 뒷자리 수는 0 또는 2가 된다.
다음 수의 맨 뒷 자리 수가 2인 수는 이전 수의 맨 뒷자리 숫자가 1,3 의 합이 된다.따라서 점화식은 nextCount[k] = numCount[k-1] + numCount[k+1] 이다.
다음 수의 뒷자리수가 0인 경우는 nextCount[0] = numCount[1] 이고
다음 수의 뒷자리수가 9인 경우는 nextCount[9] = numCount[8] 이다.