๐Ÿงท ๋ฌธ์ œ

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

์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ธธ์ด๊ฐ€ n์ธ ๋ชจ๋“  ์ž๋ฆฌ์ˆ˜์˜ ์ฐจ์ด๊ฐ€ 1์ด ๋‚˜๋Š” ๊ณ„๋‹จ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๐Ÿ›  ํ’€์ด

์ด ๋ฌธ์ œ๋Š” DP table์„ 1์ฐจ์›์ด ์•„๋‹Œ 2์ฐจ์›์œผ๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

Step 1.
 ๋จผ์ € DP table์„ d[์ž๋ฆฌ์ˆ˜][๋์ž๋ฆฌ ์ˆซ์ž] = ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

Step 2.

์ž๋ฆฌ์ˆ˜ 0 1 2 3 4 5 6 7 8 9
1 0 1 1 1 1 1 1 1 1 1
2 1 1 2 2 2 2 2 2 2 1
3 1 3 3 4 4 4 4 4 3 2

 ์ž๋ฆฌ์ˆ˜๊ฐ€ 1์ผ๋•Œ๋ถ€ํ„ฐ ๋ณด๋ฉด, ์ž๋ฆฌ์ˆ˜๊ฐ€ 1์ผ๋•Œ๋Š” ๋‹น์—ฐํ•˜๊ฒŒ๋„ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 1์ด๋‹ค.
 ์ž๋ฆฌ์ˆ˜๊ฐ€ 2์ผ๋•Œ๋ถ€ํ„ฐ๋Š” ๋งจ ๋’ค์— 0 ๋˜๋Š” 9๊ฐ€ ์˜ค๋Š” ๊ฒฝ์šฐ ํŠน์ˆ˜ํ•˜๋‹ค. ์ฒซ๋ฒˆ์งธ๋กœ, 0์œผ๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ ์ž๋ฆฌ์ˆ˜ - 1์˜ ๋์ž๋ฆฌ ์ˆซ์ž๊ฐ€ 1์ธ ๊ฒฝ์šฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, 9๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž๋ฆฌ์ˆ˜ - 1์˜ ๋์ž๋ฆฌ ์ˆซ์ž๊ฐ€ 8์ธ ๊ฒฝ์šฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๊ฐ์ž d[i][j] = d[i-1][1], d[i][j] = d[i-1][8]๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
 ๋์ž๋ฆฌ ์ˆซ์ž๊ฐ€ 1๋ถ€ํ„ฐ 8๊นŒ์ง€๋Š” ๋ฌธ์ œ์— ๋‚˜์™€์žˆ๋“ฏ์ด ๊ณ„๋‹จ์ˆ˜์˜ ์ •์˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฐจ์ด๊ฐ€ 1์ด ๋‚˜๋„๋ก DP table์„ ๊ตฌ์„ฑํ•ด์ค€๋‹ค. ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๋ฉด d[i][j] = d[i-1][j-1] + d[i-1][j+1] ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Step 3.
 ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฌธ์ œ์—์„œ "์ •๋‹ต์„ 1,000,000,000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค." ๋ผ๊ณ  ๋‚˜์™€์žˆ์—ˆ์œผ๋ฏ€๋กœ n์ž๋ฆฌ ์ˆซ์ž์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์˜ ํ•ฉ์—์„œ 1,000,000,000์„ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ–Š ๋‚˜์˜ ์ฝ”๋“œ

def solution(x):
    d = [[0] * 10 for _ in range(101)]
    for i in range(1, 10):
        d[1][i] = 1

    for i in range(2, n+1):
        for j in range(10):
            if j == 0:
                d[i][j] = d[i-1][1]
            elif j == 9:
                d[i][j] = d[i-1][8]
            else:
                d[i][j] = d[i-1][j-1] + d[i-1][j+1]

    return sum(d[x]) % 1000000000

if __name__ == "__main__":
    n = int(input())
    print(solution(n))