May 05, 2020
문제
45656이란 수를 보자.
이 수는 인접한 모든 자리수의 차이가 1이 난다. 이런 수를 계단 수라고 한다.
세준이는 수의 길이가 N인 계단 수가 몇 개 있는지 궁금해졌다.
N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. (0으로 시작하는 수는 없다.)
입력
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
출력
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.#include <iostream>
#include <vector>
#include <numeric>
#define mod 1000000000
using namespace std;
int main (){
int N;
cin >> N;
vector<vector<long long>> dp (N, vector<long long>(10, 1));
for (int i = 1 ; i < N ; i++){
for (int j = 0 ; j < 10 ; j++){
if (j==0) dp[i][j] = (dp[i-1][j+1] % mod); // 0을 만들 수 있는 수는 1 밖에 없으므로 1에 대한 갯수만 더해준다.
else if (j==9) dp[i][j] = (dp[i-1][j-1] % mod); // 9를 만들 수 있는 수는 8 밖에 없으므로 8에 대한 갯수만 더해준다.
else dp[i][j] = (dp[i-1][j-1] % mod + dp[i-1][j+1] % mod); // 0과 9가 아닌 나머지 수들은 모두 j-1, j+1 로 만들 수 있다.
}
}
long long ans = 0;
for(int i = 0 ; i < 9 ; i++){
ans = (ans + dp[N-1][i])%mod;
}
cout << ans;
}