-
10844 : 쉬운 계단 수Solve Algorithms/DP, BruteForce 2020. 4. 22. 13:42728x90
출처 : https://www.acmicpc.net/problem/10844
문제
45656이란 수를 보자.
이 수는 인접한 모든 자리수의 차이가 1이 난다. 이런 수를 계단 수라고 한다.
세준이는 수의 길이가 N인 계단 수가 몇 개 있는지 궁금해졌다.
N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. (0으로 시작하는 수는 없다.)
입력
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
출력
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
접근
- '쉬운' 계단 수이지만, 문제는 전혀 쉽지 않았다.
- 이번 문제는 구글링을 통해, 다른 블로그에서 풀이법을 알 수 있었다.
- 하지만, 잘 이해는 되지 않았다. 내가 이해 할 수 있었던 것은, 직접 나열하여 규칙을 찾아야 한다는 것 정도.
코드
package beak;public class Beak10844 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));int n = Integer.parseInt(br.readLine());long[][] dp = new long[n + 1][10];long sum = 0;for (int i = 1; i <= 9; i++) {dp[1][i] = 1;}for (int i = 2; i <= n; i++) {for (int j = 0; j <= 9; j++) {if (j == 0)dp[i][j] = dp[i - 1][1];else if (j == 9)dp[i][j] = dp[i - 1][8];elsedp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j + 1]) % 1000000000;}}for (int i = 0; i <= 9; i++) {sum += dp[n][i];}}}728x90'Solve Algorithms > DP, BruteForce' 카테고리의 다른 글
1699 : 제곱수의 합 (0) 2020.04.28 11053 : 가장 긴 증가하는 부분 수열 (0) 2020.04.24 2156 : 포도주 시식 (0) 2020.04.22 1932 : 정수 삼각형 (0) 2020.04.22 1912 : 연속합 (0) 2020.04.19