Bottom-Up 방식으로 해결
import java.util.*;
public class Main {
static long mod = 1000000000;
static long[][] A;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
A = new long[num+1][10];
stairNum(num);
long temp = 0;
for (int i=0;i<10;i++) {
temp += A[num][i];
}
temp %= mod;
System.out.println(temp);
}
static void stairNum(int n) {
// Bottom-Up 방식
// A[i][j] = 길이가 i이고 마지막 숫자가 j인 계단 수의 개수
// 점화식 : D[i][j] = D[i-1][j-1] + D[i-1][j+1];
for (int i=1;i<10;i++) {
A[1][i] = 1;
}
for (int i=2;i<n+1;i++) {
for (int j=0;j<10;j++) {
A[i][j] = 0;
if (j-1 >= 0) { // +1로 연속이려면 직전 마지막 수가 0과 같거나 커야함 (음수 나올 수 없기 때문)
A[i][j] += A[i-1][j-1];
}
if (j+1 <= 9) { // -1로 연속이려면 직전 마지막 수가 9와 같거나 작아야 함
A[i][j] += A[i-1][j+1];
}
A[i][j] %= mod;
}
}
}
}
'알고리즘 > 백준 알고리즘(JAVA)' 카테고리의 다른 글
JAVA)11053 가장 긴 증가하는 부분 수열 - 다이나믹 프로그래밍 (0) | 2020.07.28 |
---|---|
JAVA)2193번 이친수 - 다이나믹 프로그래밍 (0) | 2020.07.23 |
JAVA)15990번 1, 2, 3 더하기 5 - 다이나믹 프로그래밍 (0) | 2020.07.23 |
JAVA)16194번 카드 구매하기 2 - 다이나믹 프로그래밍 (0) | 2020.07.21 |
JAVA)11052번 카드 구매하기 - 다이나믹 프로그래밍 (0) | 2020.07.21 |
알고리즘/백준 알고리즘(JAVA) 카테고리의 다른 글
JAVA)11053 가장 긴 증가하는 부분 수열 - 다이나믹 프로그래밍
JAVA)2193번 이친수 - 다이나믹 프로그래밍
JAVA)15990번 1, 2, 3 더하기 5 - 다이나믹 프로그래밍
JAVA)16194번 카드 구매하기 2 - 다이나믹 프로그래밍