https://www.acmicpc.net/problem/10844
45656이란 수를 보자.
이 수는 인접한 모든 자리수의 차이가 1이 난다. 이런 수를 계단 수라고 한다.
세준이는 수의 길이가 N인 계단 수가 몇 개 있는지 궁금해졌다.
N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. (0으로 시작하는 수는 없다.)
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
import java.util.*;
public class boj_10844 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
long[][] dp = new long[N + 1][10];
for (int i = 1; i < 10; i++){
dp[1][i] = 1;
}
for (int i = 2; i <= N; i++){
for (int j = 0; j < 10; j++){
if (j == 0){
dp[i][j] = dp[i - 1][j + 1] % 1000000000;
}
else if (j == 9) {
dp[i][j] = dp[i - 1][j - 1] % 1000000000;
}
else {
dp[i][j] = (dp[i - 1][j + 1] + dp[i - 1][j - 1]) % 1000000000;
}
}
}
long answer = 0;
for (int i = 0; i < 10; i++){
answer += dp[N][i];
}
System.out.println(answer % 1000000000);
}
}
처음에 점화식을 dp[i] = dp[i - 1] * 2 - 1
로 세웠다가 틀려서 검색을 해봤다. 뒷자리 수에 따라 달라진다는 것을 알고 있었는데 이차원 배열을 사용해야 한다는 것은 검색을 통해 알 수 있었다. 그래도 틀렸다고 나와서 비교해보니 배열 선언을 long
으로 해야한다는 것...!