쉬운 계단 수 C++ - 백준 10844

김관중·2024년 1월 23일
0

백준

목록 보기
20/129

https://www.acmicpc.net/problem/10844

이 문제는 dp 테이블을 2차원 배열로 잡는 방법을 사용하는 문제이다.

먼저 계단 수의 개수 간에 관계를 살펴보면 1~8은 다음 자리 수의 +-1이 되는 수를 유발하고, 0,9는 1,8을 유발한다.

이런 과정을 구현하면 시간 초과이고, 이를 알맞게 dp 테이블에
저장해야 한다.

따라서 dp 테이블을 2차원 배열 dp[100][10]으로 잡았다.

0과 9일 때에는 8에서만 생성되기에 그 부분을 유연히 처리했고,

다른 수들은 전 자리 수의 마지막 수 +-1에서 유발되는

점화식을 작성해주었다.

코드는 다음과 같다.

#include <iostream>
#define MOD 1000000000
typedef long long ll;
using namespace std;

ll dp[100][10];
ll ans=0;
int n;

int main(){
	cin >> n;
	for(int i=1;i<10;i++){
		dp[0][i]=1;
	}
	for(int i=1;i<n;i++){
		for(int j=0;j<10;j++){
			if(j==0){
				dp[i][0]=dp[i-1][1]%MOD;
			}
			else if(j==9){
				dp[i][9]=dp[i-1][8]%MOD;
			}
			else{
				dp[i][j]=(dp[i-1][j-1]+dp[i-1][j+1])%MOD;
			}
		}
	}
	for(int i=0;i<10;i++){
		ans+=dp[n-1][i];
	}
	cout << ans%MOD;
}
profile
꾸준히 학습하기

0개의 댓글

관련 채용 정보