< 문제 >
< 입출력 >
< 풀이 >
dp 배열을 2차원 리스트로 정의해서, 자리수에 대한 정보를 dp에 넣는 새로운 문제였다.
감이 잘 잡히지 않아 소스를 참고해서 풀었다.
dp[자리수][앞 자리의 수] 값은 가능한 경우의 수이다.
1) 앞 자리가 0인 경우,
dp[ i ][ j ] = dp[ i - 1 ][ 1 ]
2) 앞 자리가 1~8인 경우,
dp[ i ][ j ] = dp[ i -1 ][ j -1] + dp[ i -1 ][ j +1]
3) 앞 자리가 9인 경우,
dp[ i ][ j ] = dp[ i -1 ][ 8 ]
< 코드 >
N = int(input())
dp = [[0]*10 for _ in range(N+1)]
for i in range(1, 10):
dp[1][i] = 1
for i in range(2, N+1):
for j in range(10):
if j == 0:
dp[i][j] = dp[i-1][1]
elif j == 9:
dp[i][j] = dp[i-1][8]
else:
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
print(sum(dp[N]) % 1000000000)
골드 1인 BOJ 1562번 계단 수 문제도 풀어봐야겠다....!
'코딩 테스트 > 다이나믹 프로그래밍' 카테고리의 다른 글
[백준 1005번] ACM Craft 문제 풀이 (0) | 2023.09.11 |
---|---|
[백준 1965번] 상자 넣기 문제풀이 (with Python) (0) | 2023.08.24 |
[백준 11722번] 가장 긴 감소하는 부분 수열 문제 풀이 with Python (0) | 2023.08.22 |
[백준 11049번] 행렬 곱셈 순서 문제 풀이 (0) | 2023.08.21 |
[백준 2579번] 계단 오르기 문제 풀이 (0) | 2023.08.02 |
댓글