본문 바로가기

Algorithm/Dynamic Programming

[C++] 백준 11057번 : 오르막 수 (S1)

#문제

www.acmicpc.net/problem/11057

 

11057번: 오르막 수

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

www.acmicpc.net

#풀이 & 학습한 내용

소스코드의 16~22행에 해당하는 Optimal substructure를 통해 for문을 구성합니다. 마지막에 오는 원소가 i일 때 그 직전에 오는 수가 0부터 i까지 가능함을 이용합니다. dp[i][j]를 i번째수가 j일때의 경우의 수라 할때 dp[i][j]는 dp[i-1][0]부터 dp[i-1][j]까지의 합입니다.

 

#소스코드

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
#include<iostream>
#include<algorithm>
 
using namespace std;
 
long long dp[1002][10];
 
int main(void) {
    int N;
    cin >> N;
 
    for (int i = 0; i <= 9; i++) {
        dp[1][i] = 1;
    }
 
    for (int i = 2; i <= N; i++) {
        for (int j = 0; j <= 9; j++) {
            dp[i][j] = 0;
            for (int k = 0; k <= j; k++)
                dp[i][j] += dp[i-1][k] % 10007;
        }
    }
    
    long long sum = 0;
    for (int i = 0; i <= 9; i++) {
        sum += dp[N][i];
    }
    cout << sum % 10007 << '\n';
}
cs

github.com/HoYoungChun/BOJ_algorithm/blob/master/Dynamic_Programming/BOJ_11057.cpp

 

HoYoungChun/BOJ_algorithm

Baekjoon Online Judge problem solving by C++. Contribute to HoYoungChun/BOJ_algorithm development by creating an account on GitHub.

github.com