-
[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. 개선할 점
풀이 오류 지적, 다른 접근법 공유, 그 밖에 질문 등 모든 의견을 환영합니다.
'알고리즘 연습' 카테고리의 다른 글
[2579] 계단 오르기 - Java (0) 2022.03.23 [1003번] 피보나치 함수 - Java (0) 2022.03.18 [11052] 카드 구매하기 - Java (0) 2022.03.14 [9095] 1,2,3 더하기 - Java (0) 2022.03.09 [1463] 1로 만들기 - Java (0) 2022.03.08