1. 문제
10844번
2. 코드
- 이 문제는 2차원 메모이제이션 공간을 활용한 동적계획법 문제이다.
- bottom-up 방식으로 풀 수 있으며,
- 메모이제이션 공간 내 요소들의 관계(점화식)와 초기값 설정이 중요!
n = int(input())
mod = 1000000000
'''
이 문제에서는 몇번째 숫자인지 나타내기 위한 공간과
0~9까지 어떤 숫자인지 나타내기 위한 공간 2개가 필요하다.
'''
dp = [[0]*10 for _ in range(n+1)]
'''
dp[i]는 총 10개 원소의 배열인데 각 0 ~ 9까지 숫자를 의미
dp[1], 즉 첫번째 숫자에서 0이 맨 앞에 올 수 없으므로 dp[1][0] = 0
따라서, dp[1]은 아래와 같이 초기화 한다.
'''
dp[1] = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
for i in range(2, n+1):
dp[i][0] = dp[i - 1][1]
for j in range(1, 9):
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1]
dp[i][9] = dp[i - 1][8]
print(sum(dp[n]) % mod)