본문 바로가기
코딩/백준-파이썬

백준 10844번: 쉬운 계단 수 (DP)

by 철없는민물장어 2022. 8. 2.
728x90
반응형

https://www.acmicpc.net/problem/10844

 

10844번: 쉬운 계단 수

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

www.acmicpc.net

문제

45656이란 수를 보자.

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

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

입력

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

출력

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


뒤에 추가할 수 있는 숫자의 개수(0~9)

  0 1 2 3 4 5 6 7 8 9
n=1 0 1 1 1 1 1 1 1 1 1
n=2 1 1 2 2 2 2 2 2 2 1
n=3 1 3 3 4 4 4 4 4 3 2

 

n=1일 때 0은 올 수 없고 1~9까지 가능하다

n=2일 때.. 뒷자리수가 0이 되는 경우는 앞자리수가 1인경우고

뒷자리수가 1~8이 되는 경우는 앞자리수가 -1 ,+1인 수의 개수의 합이고

뒷자리수가 9가 되는 경우는 앞자리수가 8인 경우다

대충 찍찍 그어보면 이런 느낌인데 

ㅋㅋ

ㅋㅋㅋ

그리기가 쉽지 않음

 

암튼 난 이해함~

n=int(input())

d=[[0]*10 for i in range(101)]


d[1]=[0,1,1,1,1,1,1,1,1,1]

for i in range(2,101):
    for j in range(10):
        if j==0:
            d[i][j]=d[i-1][1]
        elif j==9:
            d[i][j]=d[i-1][8]
        else:
            d[i][j]=d[i-1][j-1]+d[i-1][j+1]

print(sum(d[n])%1000000000)
728x90
반응형

댓글