Koder / 박성훈
article thumbnail

www.acmicpc.net/problem/11057

 

11057번: 오르막 수

오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수

www.acmicpc.net

이 역시 2차원 디피문제이다.

무난하게 풀었다.

 

dp[i][j]는 길이가 i인 숫자의 마지막이 j일때 만들어지는 오르막 수의 개수이다.

즉 수의 길이가 N인 오르막 수의 개수를 구하려면 dp[n][0]부터 dp[n][9]까지 더해주고

10007로 나눈 나머지를 출력해주면 깔끔하게 AC가 나오게 된다

주의할만한점으로는

계산도중에 int범위를 넘어갈거같지는 않아도

습관들이는 느낌으로다가 항상 dp문에도 mod연산을 해주는것이 중요하다.

 

#include <stdio.h>

int dp[1234][11] = {0};

int main(){
	int n;
	scanf("%d", &n);
	
	for(int i=0; i<10; i++) dp[1][i] = 1;
	for(int i=2; i<=n; i++){
		for(int j=0; j<=9; j++){
			for(int k=j; k<=9; k++){
				dp[i][k] =(dp[i][k] + dp[i-1][j]) % 10007;
			}
		}
	}
	int ans = 0;
	for(int i=0; i<10; i++) ans += dp[n][i];
	printf("%d", ans%10007);
	return 0;
}

반응형