๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/10844
ํ์ด IDEA
dp๋ฅผ ๊พธ์คํ ํ๋ค๋ณด๋, ์ด๋ค๊ฒ 2์ฐจ์์ผ๋ก ํ์ด์ผํ ์ง, ์ด๋ค๊ฒ ์ผ๋ฐ dp 1์ฐจ์ ๋ฐฐ์ด๋ก ํ์ด์ผํ ์ง ๊ฐ์ด ์กํ๋ค. ์ฌ๋ ! ํด๋น ๋ฌธ์ ๋ N=1 ๋ถํฐ ๊ฒฝ์ฐ์์๋ฅผ ํ๋์ฉ ๋ฐ์ ธ๊ฐ๋ฉฐ ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด๋, ๊ท์น์ด ๋์ ๋ณด์๋ค.
์ฐพ์ ๊ท์น์ ์๋์ ๊ฐ๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด, ๋งจ ๋ท์๋ฆฌ์๊ฐ 0๊ณผ 9์ธ ๊ฒฝ์ฐ์๋ ํ๊ฐ์ง์ฉ ๋์ด๋ ์ ์๊ณ , 1~8 ์ด๋ผ๋ฉด ๋๊ฐ์ง์ ๊ฒฝ์ฐ๋ก ๋์ด๋ ์ ์๋ค๋ ๊ท์น์ ์ฐพ์๋ผ ์์๋ค. ์ด๋ฅผ dp ๊ฒฝ์ฐ์์์ ๋ง๊ฒ ๋์ํ ํ๋ฉด ์๋์ ๊ฐ๋ค.
- ํ์ฌ N์์, 0์ ๋งจ ๋ท์๋ฆฌ๋ก ๊ฐ์ง๋ ค๋ฉด, N-1์ ๋์๋ฆฌ 1์ธ ๊ฒฝ์ฐ๋ค์ด ์์ผํ๋ค.
- dp[N][0] = dp[N-1][1]
- ํ์ฌ N์์, 9๋ฅผ ๋งจ ๋์๋ฆฌ๋ก ๊ฐ์ง๋ ค๋ฉด, N-1์ ๋์๋ฆฌ 8์ธ ๊ฒฝ์ฐ์ด๋ค.
- dp[N][9] = dp[N-1][8]
- ํ์ฌ N์์, 1,2,3,4,5,6,7,8 ์ ๋งจ ๋์๋ฆฌ๋ก ๊ฐ์ง๋ ค๋ฉด N-1์์ ์๋ค ์ซ์๋ฅผ ํ๋์ฉ ๊ฐ์ ธ์์ผํ๋ค. (์ด 2๊ฐ)
- dp[N][j] = dp[N-1][j-1] + dp[N-1][j+1]
์ ์ธ๊ฐ์ ์ ํ์์, ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ๊ตฌํํ๋ค. ๊ตฌํํ ์์ค์ฝ๋๋ ์๋์ ๊ฐ๋ค. ๋ฌธ์ ์กฐ๊ฑด์์ ์ฃผ์ด์ง๋๋ก 1000000000์ ๋๋์ด์ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํด์ฃผ์๋ค.
let n = Int(readLine()!)!
var dp = [[Int]](repeating: Array(repeating: 0, count: 10), count: n+1)
var sum = 0
for i in 0...9 {
dp[1][i] = 1
}
if n > 1 {
for i in 2...n {
for j in 0...9 {
if j == 0 {
dp[i][0] = dp[i-1][1] % 1000000000
} else if j == 9 {
dp[i][9] = dp[i-1][8] % 1000000000
} else {
dp[i][j] = (dp[i-1][j-1] + dp [i-1][j+1]) % 1000000000
}
}
}
}
for i in 1...9 {
sum = (sum + dp[n][i]) % 1000000000
}
print(sum%1000000000)