Algorithm

백준 10844번 <쉬운 계단 수>

seungh2 2021. 7. 27. 23:02

백준 알고리즘 10844번

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

 

10844번: 쉬운 계단 수

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

www.acmicpc.net


10844번

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

N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하여라.

 

입력으로 N이 주어진다.

 

출력으로 계단수의 개수를 1,000,000,000으로 나눈 나머지를 출력한다.


문제 해결

stairN 배열은 이차원 배열로 각 길이에서 계단 수의 개수를 의미한다.

 

stairN[i][j] : 길이가 i이고 j를 포함하는 계단 수의 개수이다.

계단 수는 인접한 모든 자리의 차이가 1이기 때문에 stairN[i][j] = stairN[i-1][j-1] + stairN[i-1][j+1] 이다.

길이가 i-1이고 j-1로 끝나는 수에 j를 붙이거나 길이가 i-1이고 j+1로 끝나는 수에 j를 붙이면 된다.

이때, j가 0인 경우와 9인 경우를 예외처리 해줘야 하는데 0에서 -1을 할 수 없고 9에 +1을 할 수 없기 때문이다. 

 


코드

def main():
    n = int(input())
    stairN = [[0 for _ in range(10)] for _ in range(n+1)]
    stairN[1] = [0,1,1,1,1,1,1,1,1,1]

    for i in range(2,n+1):
        for j in range(10):
            temp = stairN[i-1][j]
            if j == 0:
                stairN[i][j+1]+=temp
            elif j == 9:
                stairN[i][j-1] += temp
            else:
                stairN[i][j+1] += temp
                stairN[i][j-1] += temp

    result = 0
    for i in stairN[n]:
        result += i
    result = result % 1000000000
    print(result)


main()

결과


 

 

 

728x90