Game Develop

[Algorithm] Baekjoon 11057번 : 오르막 수 본문

Algorithm/Baekjoon

[Algorithm] Baekjoon 11057번 : 오르막 수

MaxLevel 2023. 4. 30. 05:06

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

 

11057번: 오르막 수

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

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#define MOD 10007
 
int n;
int dp[1001][10= { 0 };
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
 
    cin >> n;
 
    for (int i = 0; i < 10++i)
    {
        dp[1][i] = 1;
    }
 
    for (int i = 2; i <= n; ++i) // n자릿수만큼만
    {
        for (int j = 0; j <= 9++j)
        {
            for (int k = j; k <= 9++k)
            {
                dp[i][j] = (dp[i][j] % MOD + dp[i - 1][k] % MOD) % MOD;
            }
        }
    }
 
    int answer = 0;
 
    for (int i = 0; i <= 9++i)
    {
        answer = (answer % MOD + dp[n][i] % MOD) % MOD;
    }
 
    cout << answer;
}
cs

 

이 문제에서의 규칙은 아래와 같다.

 

000 001 002  ...... 009

 

011 012 013 .... 019..

 

즉, n번째 자릿수의 값이 만약 1이라면 dp테이블을 돌며 n-1번째의 1이상인 값들을 합산해주면 된다.

MOD연산은 저렇게 까지 안해도 될 수도 있지만, 저 방법이 제일 정석적인 방법이다.

(A + B) % MOD -> (A%MOD + B%MOD)%MOD