λ¨Όμ , ν¨ν΄μ μ°ΎκΈ° μν΄ κ²½μ°μ μλ₯Ό μ΄ν΄λ³΄μ
0μΌλ‘ μμνλ μλ κ²½μ°μ μλ₯Ό λ°μ Έλ³΄μκ³ , κ²°κ³Όλ₯Ό μΆλ ₯ν λ λν΄μ£Όμ§λ§ μμΌλ©΄ λ¬Έμ κ° μλ€.
λ©λͺ¨μ΄μ μ΄μ μ μν, Dp[μλ¦Ώμ][μμνλμ] λ‘ 2μ°¨μ λ°°μ΄μ μ μΈν΄μ€λ€.
0μΌλ‘ μμνλ κ²½μ°
3μ리μλ‘ λ§λ κ³λ¨μ μλ₯Ό μ΄ν΄λ³΄λ©΄,
0μΌλ‘ μμνλ μλ 010 κ³Ό 012 κ° μλ€.
0μ λμ΄λκ³ λ³΄λ©΄, 10 κ³Ό 12 μμ μ μ μκ³ 0μΌλ‘ μμνλ 3μ리 κ³λ¨ μλ 1λ‘ μμνλ 2μ리 κ³λ¨μ μμμ μ μ μλ€.
μ¦, 0μΌλ‘ μμνλ Nμ리 κ³λ¨ μλ 1λ‘ μμνλ N-1μ리 κ³λ¨μ μμ κ°λ€.
Dp[N][0]=Dp[N-1][1]
9λ‘ μμνλ κ²½μ°
3μ리μλ‘ λ§λ κ³λ¨μ μλ₯Ό μ΄ν΄λ³΄λ©΄,
9λ‘ μμνλ μλ 987 κ³Ό 989κ° μλ€.
9λ₯Ό λΌμ΄λκ³ λ³΄λ©΄, 87κ³Ό 89μμ μ μ μκ³ 9μΌλ‘ μμνλ 3μ리 κ³λ¨ μλ 8λ‘ μμνλ 2μ리 κ³λ¨μ μμμ μ μ μλ€.
μ¦, 9μΌλ‘ μμνλ Nμ리 κ³λ¨ μλ 8λ‘ μμνλ N-1μ리 κ³λ¨μ μμ κ°λ€.
Dp[N][9]=Dp[N-1][8]
2~8λ‘ μμνλ κ²½μ°
3μ리μλ‘ λ§λ κ³λ¨μ μλ₯Ό μ΄ν΄λ³΄λ©΄,
4λ‘ μμνλ μλ 432 434 454 456 μ΄ μκ³
μ΄λ 2μ리μμ 3μΌλ‘ μμνλ κ³λ¨μ κ²½μ°μ μ + 2μ리μμ 5λ‘ μμνλ κ³λ¨μ κ²½μ°μ μκ° λ¨μ μ μ μλ€.
μ¦, i(2~8)μΌλ‘ μμνλ Nμ리 κ³λ¨ μλ [i-1λ‘ μμνλ N-1μ리 κ³λ¨μ μ λνκΈ° i+1λ‘ μμνλ N-1μ리 κ³λ¨μ μ]μ κ°λ€.
Dp[N][i] = Dp[N-1][i-1]+Dp[N-1][i+1]
κ²°κ³Ό
μλ¦Ώμ Nμ μ λ ₯λ°μΌλ―λ‘, Dp[N][0] ~ Dp[N][9] κΉμ§ κ²½μ°μ μλ₯Ό λͺ¨λ μ±μ°κ³ ,
0μΌλ‘ μμνλ κ³λ¨μλ μλ€κ³ νκΈ° λλ¬Έμ, κ²°κ³Όλ Dp[N][1] λΆν° Dp[N][9] κΉμ§ λν΄μ£Όλ©΄ λλ€!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int mod = 1000000000;
int[][] Dp = new int [N+1][10];
for(int i=0;i<=9;i++) {
Dp[1][i] = 1; //1μ리 κ³λ¨ μ
}
for(int i=2;i<=N;i++) {
for(int j=0;j<=9;j++) {
if(j==0) { //0μΌλ‘ μμνλ κ³λ¨ μ
Dp[i][j]=Dp[i-1][1]%mod;
}
else if(j==9) { //9λ‘ μμνλ κ³λ¨ μ
Dp[i][j]=Dp[i-1][8]%mod;
}
else { //2 ~ 8 λ‘ μμνλ κ³λ¨ μ
Dp[i][j]=(Dp[i-1][j-1]%mod+Dp[i-1][j+1]%mod)%mod;
}
}
}
int sum =0;
for(int i=1;i<=9;i++) {// iλ 1λΆν° μμ! 0μΌλ‘ μμνλ κ²½μ°μ μ κΉμ§ λν΄μ£Όλ©΄ μλ¨!!
sum+=Dp[N][i]; //Nμ리 1~9λ‘ μμνλ κ²½μ°μ μλ₯Ό λ€ ν©νλ©΄ λ¨.
sum%=mod;
}
System.out.println(sum%mod);
}
}
μ€λ²νλ‘μ°κ° λ°μν μ μμΌλ %modλ₯Ό κΌΌκΌΌν λ£μ΄μ£Όλκ² μ’λ€.