Algorithm, boj, 쉬운 계단 수(10844)
풀이
- 계단이 1개일때, 2개일때, 3개일때…를 적어보면 점화식이 쉽게 보인다.
package org.baekjoon;
import java.util.Scanner;
public class test10844_dp_easyStair {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
System.out.println(function(num));
}
public static int function (int num) {
// n자리의 m으로 시작하는 계단의 개수 (m은 1~9)
long[][] arr = new long[100][10];
for (int i = 1; i < 10; i++) {
// 1자리 숫자는 모두 1가지의 계단의 수를 가진다
arr[0][i] = 1;
// 2자리의 숫자의 계단의 수
if(i == 9)
arr[1][i] = 1; // 98
else
arr[1][i] = 2; // (10,12), (21,23)...(87,89)
}
if (num <= 2 )
return getSum(arr, num);
// 3자리 수 이상이라면
for (int i = 2; i < num; i++) {
for (int j = 1; j < 10; j++) {
if ( j == 1 )
arr[i][j] = (arr[i-1][j+1] + arr[i-2][j]) % 1000000000;
else if ( j == 9 )
arr[i][j] = arr[i-1][j-1] % 1000000000;
else
arr[i][j] = (arr[i-1][j-1] + arr[i-1][j+1]) % 1000000000;
}
}
return getSum(arr, num);
}
public static int getSum(long[][] arr, int num) {
int answer = 0;
for (int i = 1; i < 10; i++) {
answer += arr[num-1][i];
}
return answer;
}
}
Reference