알고리즘 연습
[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. 개선할 점
풀이 오류 지적, 다른 접근법 공유, 그 밖에 질문 등 모든 의견을 환영합니다.