[11057] 오르막 수

1 minute read

풀이

dp[i][j]가 길이가 i이고, 마지막 숫자가 j인 오르막 수의 수를 나타낸다고 생각하고 표를 그려보자.

내 코드

#include <iostream>

long long dp[1001][10];
int n;
int mod = 10007;

int main(void) {
	scanf("%d", &n);
	
	for (int j = 0; j < 10; j++) {
		dp[1][j] = 1;
	}
	for (int i = 1; i <= n; i++) {
		dp[i][0] = 1;
	}
	for (int i = 2; i <= n; i++) {
		for (int j = 1; j < 10; j++) {
			dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
			dp[i][j] %= mod;
		}
	}
	long long ans = 0;
	for (int j = 0; j < 10; j++) {
		ans += dp[n][j];
		ans %= mod;
	}
	printf("%lld\n", ans);
	return 0;
}

백준님 코드

#include <iostream>

long long dp[1001][10];
int n;

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

	return 0;
}

Tags:

Categories:

Updated: