-
[Baekjoon Online Judge] 11057번: 오르막 수문제 풀이/Baekjoon Online Judge 2021. 3. 8. 21:22
요구사항
- 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다.
- 수의 길이 N이 주어졌을 때, 오르막 수의 개수를 구하는 프로그램을 작성한다. 수는 0으로 시작할 수 있다.
입력
- 첫째 줄에 N (1 ≤ N ≤ 1,000)이 주어진다.
출력
- 첫째 줄에 길이가 N인 오르막 수의 개수를 10,007로 나눈 나머지를 출력한다.
숫자의 자리수와 각 자리수의 끝 자리를 저장하는 이차배열을 dp 테이블로 사용한다. 만약, 자신의 숫자와 같거나 큰 수가 오면 무조건 오르막 수 인 것을 보장하게 된다.
예를들어 OO5 (O은 공백이라고 가정한다.) 라는 3자리 수는 O1, O2, O3, O4, O5가 오는 경우 각각 O15, O25, O35, O45, O55는 오르막 수가 된다.
즉 정리하면 이전 자리 수 중 새롭게 붙는 숫자 보다 작거나 같은 것들을 모두 더해주면 된다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Baekjoon11057 { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(bufferedReader.readLine()); int[][] dp = new int[n + 1][10]; for (int i = 1; i <= n; i++) { for (int j = 0; j <= 9; j++) { if (i == 1) { dp[i][j] = 1; continue; } for (int k = 0; k <= j; k++) { // 새롭게 추가된 j는 j보다 작거나 같은 k를 모두 더해준다. dp[i][j] += dp[i - 1][k]; } dp[i][j] %= 10007; } } int sum = 0; for (int i = 0; i < 10; i++) { sum += dp[n][i]; } System.out.println(sum % 10007); bufferedReader.close(); } }
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon Online Judge] 2252번: 줄 세우기 (0) 2021.03.17 [Baekjoon Online Judge] 7568번: 덩치 (0) 2021.03.17 [Baekjoon Online Judge] 1010번: 다리 놓기 (0) 2021.03.05 [Baekjoon Online Judge] 9465번: 스티커 (0) 2021.03.04 [Baekjoon Online Judge] 1934번: 요세푸스 문제 (0) 2021.03.04