코딩하는 해맑은 거북이
[Python] 쉬운 계단 수 - 백준 (DP) 본문
해당 글은 백준 10844번 '쉬운 계단 수' 문제를 다룬다.
문제
https://www.acmicpc.net/problem/10844
10844번: 쉬운 계단 수
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
설명
해당 문제는 1자리 수 일 때, 계단자리수는 0~9까지 수에서 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]로 카운트할 수 있다.
2자리 수 이상 일 때 부터 0일 때는 0이 앞에 올 수 없으므로 이전의 1의 갯수를,
9일 때는 올 수 있는 수는 8 밖에 없으므로 이전의 8의 갯수를 가져온다.
1~8일 때는 앞뒤로 두 개의 숫자가 올 수 있으므로 이전의 앞뒤 숫자의 갯수를 가져온다.
표로 그려보자면 자릿수에 따른 0~9의 DP는 아래와 같이 구현된다.
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 |
코드
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][j+1]
elif j == 9:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
print(sum(dp[n])%1000000000)
'코딩테스트' 카테고리의 다른 글
[Python] 숫자 카드 2 - 백준 (0) | 2023.12.19 |
---|---|
[Python] 연결 요소의 개수 - 백준 (DFS) (0) | 2023.12.15 |
[Python] 종이의 개수 - 백준 (분할정복) (0) | 2023.12.10 |
[Python] 쿼드트리 - 백준 (분할정복) (0) | 2023.12.05 |
[Python] 프린터 큐 - 백준 (0) | 2023.11.29 |
Comments