10844번: 쉬운 계단 수

문제:

45656이란 수를 보자.

이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다.

N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다.

입력:

첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.

풀이:

코드:

#include <iostream>
#define MOD 1000000000

using namespace std;

int main(){
	int n, answer = 0;
	//입력 
	cin >> n;
	long long d[n+1][10];
	//Base case 초기화 
	for(int i = 0; i <= 9; i++){
		if(i==0) d[1][i] = 0;
		else d[1][i] = 1;
	}
	//2부터 n까지 모든 경우의 수 구함 
	for(int i = 2; i <= n; i++){
		//끝에 자리마다 경우의 수 기록 
		for(int j = 0; j <= 9; j++){
			if(j == 0) d[i][j] = (d[i-1][j+1])%MOD; //끝에 자리가 1인 경우 
			else if(j == 9) d[i][j] = (d[i-1][j-1])%MOD; //끝에 자리가 9인 경우 
			else d[i][j] = (d[i-1][j-1] + d[i-1][j+1])%MOD; //나머지 경우 
		} 
	}
	//정답 합산 
	for(int i = 0; i <= 9; i++) answer = (answer+d[n][i])%MOD;
	//출력 
	cout << answer;
}