알고리즘 연습

[11057] 오르막수 - Java

밀깜 2022. 3. 15. 15:23

 

1. 문제

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

 

11057번: 오르막 수

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

www.acmicpc.net

 

2. 풀이

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {

        // 1. Read N
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        // 2. Calculate
        int result = 0;
		
        // a. make int array
        int[][] dp = new int[N + 1][10]; // [][last digit number(0 ~ 9)]
		
        // b. N == 1
        for (int i = 0; i < 10; i++) {
            dp[1][i] = 1;
        }
		
        // c. N >= 2
        for (int i = 2; i <= N; i++) {
            for (int j = 0; j < 10; j++) {
                // c-1. if last digit == 0, only 0 is possible
                if (j == 0) {
                    dp[i][j] = dp[i - 1][j] % 10007;
                }
                // c-2. if not, you can add the value of dp[i - 1][0 ~ j]
                else {
                    int k = j;
                    while (k >= 0) {
                        dp[i][j] += dp[i - 1][k--] % 10007;
                    }
                }
            }
        }
		// d. add numbers to find result
        for (int i = 0; i < 10; i++) {
            result += dp[N][i];
        }

        // 3. Print result
        System.out.println(result % 10007);
    }
}

 

3. 배운점

- 전 숫자의 마지막 자리 값이 sub problem을 나누는 기준이 된다.

 

4. 개선할 점

 

 


풀이 오류 지적, 다른 접근법 공유, 그 밖에 질문 등 모든 의견을 환영합니다.