PS 연습

[DP] 백준 문제 풀이 - 10844 쉬운 계단 수

생선묵김치찌개 2022. 6. 26. 15:42

👩🏻‍💻 문제링크

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

 

10844번: 쉬운 계단 수

첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

 

✍️ 아이디어

 

1. 문제 이해

  • 계단 수가 되려면 인접한 자리의 수가 1 차이여야 함

2. n-1자리수의 수에서 끝자리가 1차이나는 수를 추가하면 n자리수가 됨

->n자리수에서 끝에가 0,1,2,...인 경우를 나눔 (long long result[100001][10];)

 

3. n자리수에서 1은 n-1자리수에서 끝이 0과 2인 수를 더한것과 같다

 

4. n자리수에서 0, 9 는 예외로 처리

 

✍️소스코드

  • 내 코드
#include <iostream>	
using namespace std;
long long result[101][10];

int main()
{
	int N; cin>>N;
	long long num=0;
	for(int j=1; j<=9; j++)
	{
		result[1][j]=1;
	}
	for(int i=2; i<=N; i++)
	{
		result[i][0]=result[i-1][1];
		result[i][9]=result[i-1][8];
		for(int j=1; j<=8; j++)
		{
			result[i][j] = (result[i-1][j-1]  + result[i-1][j+1]);
			result[i][j]%=1000000000;
		}
	}
	for(int i=0; i<=9; i++)
	{
		num+=(result[N][i]);
	}
	cout<<num%1000000000<<'\n';
}

 

체감난이도 걸린시간 참고 사용 문법
40min 전에 내가 풀었던거 dp인데 케이스 나누는것