πŸ“– [λ°±μ€€μ•Œκ³ λ¦¬μ¦˜ 풀이] 10844 μ‰¬μš΄ 계단 수

πŸ“– 문제

https://www.acmicpc.net/problem/10844

πŸ” 접근법

길이가 N인 계단 μˆ˜κ°€ 총 λͺ‡ κ°œμΈμ§€ κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€.

μΈμ ‘ν•œ λͺ¨λ“  자리수의 차이가 1인 계단 수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€.

계단 μˆ˜λŠ” λ‹€μŒ μˆ˜κ°€ 1이 ν¬κ±°λ‚˜ 1이 μž‘μœΌλ©΄ λœλ‹€.


n=1     1       2       3       . . .  9 

n=2     12 10   21 23   34 32   . . .  98   9 λ‹€μŒ μˆ«μžλ‘œλŠ” 컀질 수 μ—†μŒ!

단

숫자의 λ²”μœ„κ°€ 0~9 μ΄λ―€λ‘œ μˆ«μžκ°€ 0μΌλ•ŒλŠ”

λ‹€μŒ μˆ«μžκ°€ 1이 더 쀄어듀 수 μ—†κ³ 

μˆ«μžκ°€ 9일 λ•ŒλŠ” λ‹€μŒ μˆ«μžκ°€ 1이 더 컀질 수 μ—†λ‹€.

πŸ’» μ½”λ“œ

package problem.dynamic.Q10844;
import java.io.*;

public class Main_10844 {
    public static int mod = 1000000000;
    public static int n;
    public static int[][] d;
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        d = new int[n+1][10];
        long answer = solve(n);
        bw.write(Long.toString(answer));
        bw.flush();
        bw.close();
    }
    public static long solve(int n){
        long answer = 0;
        for(int i=1; i<=9; i++){
            d[1][i] = 1;        //1개 짜리 κ³„λ‹¨μˆ˜  1/2/3/4/5/6/7/8/9
        }
        for(int i=2; i<=n; i++) {
            for(int j=0; j<=9; j++){
                if(j+1 <= 9){
                    d[i][j] += d[i-1][j+1];
                }
                if(j-1 >= 0){
                    d[i][j] += d[i-1][j-1];
                }
                d[i][j] %= mod;
            }
        }
        for(int i=0; i<=9; i++){
            answer += d[n][i];
        }
        return answer%mod;
    }
}

Written on April 23, 2020