문제 링크
https://www.acmicpc.net/problem/10844
10844번: 쉬운 계단 수
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
풀이 -다른 블로그 참고
동적 계획법 문제
0을 제외한 모든 숫자는 맨 앞자리에 올 수 있다.
dp[자리수][마지막 숫자] = 경우의 수 라고 할때 ,
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
그러나, 마지막 숫자가 0일 때는 앞에 1만 올 수 있으므로
dp[i][0] = dp[i-1][1]
마찬가지로 마지막 숫자가 9일 때는 앞에 8만 올 수 있으므로
dp[i][9] = dp[i-1][8]
n = int(input())
# dp[자리수][마지막 숫자] = 경우의 수
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):
dp[i][0] = dp[i-1][1]
dp[i][9] = dp[i-1][8]
for j in range(1,9):
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
print(sum(dp[n])%1000000000)
'개발 > algorithm' 카테고리의 다른 글
[백준 2156번] 포도주 시식 -python (0) | 2022.01.23 |
---|---|
[백준 11053번] 가장 긴 증가하는 부분 수열 - python (0) | 2022.01.23 |
[백준 1300번] K번째 수 -python (0) | 2022.01.23 |
[프로그래머스][level3] 풍선 터트리기 - python (0) | 2022.01.22 |
[프로그래머스][level3] 광고 삽입 -python (0) | 2022.01.22 |