프로그래밍/백준

[알고리즘] 백준 10844 파이썬 - 쉬운 계단 수 (dp)

매 석 2023. 3. 31. 19:25
반응형

 

 

10844번: 쉬운 계단 수

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

www.acmicpc.net

문제

45656이란 수를 보자.

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

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

 

문제풀이

n=int(input())
#01
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):
	#02
    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]
    #03
        else:
            dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1]
#04
print(sum(dp[n])%1000000000)

- #01 : dp 리스트에 [0]을 10개씩 묶음 것을 n개만큼 만들어 저장한다.

           dp[1]의 값은 0을 제외하고 모두 계단 수 이기에 모두 1로 저장한다.

           참고로 dp의 값은 계단 수를 누적으로 쌓아가며 최종적으로

           dp[n]일 때의 계단 수를 구하는 것이다.

- #02 : j가 0인 경우 즉 뒷자리가 0으로 끝나는 값은 앞에 1만 올 수 있다. 

           j가 9인 경우 즉 뒷자리가 0으로 끝나는 경우는 앞에 8만 가능하다.

- #03 : 그 외 1~8까지는 앞자리가 +1, -1한 값이 모두 계단 수이기에

           dp[i][j] = d[i-1][j-1] + dp[i-1][j+1]을 해준다.

- #04 : 최종적으로 dp[n][0~9]까지 각각에 가능한 계단 수가 저장되어있다.

           이를 sum하여  1,000,000,000으로 나눈 값을 출력한다.