[백준] 10844번 - 쉬운 계단 수 Python

Tuna·2022년 5월 27일
0

DP

목록 보기
5/7

문제


45656이란 수를 보자.

이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다.

N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다.

입력


첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.

출력


첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.

예제 입력 1


1

예제 출력 1


9

나머지 예제는 생략한다.

풀이


Python

import sys
input = sys.stdin.readline

dp =  [[0]*10 for _ in range(100+1)]
mod = 1000000000
n = int(input().rstrip())

for i in range(1,10):
    dp[1][i] = 1

for i in range(2,n+1):
    for j in range(10):
        if j-1 >= 0 :
            dp[i][j] += dp[i-1][j-1]
        if j+1 <=9:
            dp[i][j] += dp[i-1][j+1]

ans = sum(dp[n]) % mod

print(ans)

정리


  • DP[i][j]를 길이가 i이고 마지막 숫자가 j인 계단 수의 개수라고 dp 배열을 만든다.
  • 이때 점화식은 DP[i][j] = DP[i-1][j-1] + DP[i-1][j+1]인데 j의 범위가 0<=j<=9 임을 생각하고 dp 배열의 값을 채워나가면 된다.
profile
BE 개발자가 되기 위해 노력하는 사람

0개의 댓글