본문 바로가기
백준알고리즘/동적 계획법1

(Python/🥈4)백준 알고리즘 10844번: 쉬운 계단수

by windy7271 2023. 6. 12.
728x90
반응형

문제 바로가기

https://www.acmicpc.net/problem/10844
백준 알고리즘 쉬운 계단 수

문제:

 

45656이란 수를 보자. 이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다. N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다.

입력:

 

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

출력:

 

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

 

처음에 문제를 이해하지 못했다. N만큼의 간격을 유지한다는줄 알았지만. 하다보니 길이가 N이다 1이면 일의자리 2이면 십의자리 ,,,

이차원 리스트를 사용하여 dp를 늘려야한다.

 

근데 차이가 1이 나야하니깐 1과 9 빼고는 (-1,+1) 로 갈수 있고 1과 9 는 0과 8 밖에 못간다.

 

그 외는 위 아래 다 된다  면 12, 32 이런식으로 말이다. 그러면 -1 과 +1 위치에 합이 그다음 dp테이블 값이 된다.

import sys
sys.stdin = open('/Users/song/Desktop/Python/Python/h.txt', 'r')

N =int(sys.stdin.readline())

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)

첫 번째 포문으로 dp[1][i] 를 채워준다. 0 빼고는 다 1이다.

0은 문제에서 안된다고 나와있기 때문에 안된다.

반응형

댓글