포스트

BOJ-10844 쉬운 계단 수

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

문제 소개

인접한 모든 자리의 차이가 1인 수를 계단 수라고 한다. n이 주어졌을 때, 길이가 n인 계단 수의 개수를 구한다.

문제 풀이

리스트 lastt를 통해 DP로 풀이하였다. tDP과정 중 임시로 값을 담는 리스트이다.

리스트 last의 각 인덱스는 각 숫자로 끝나는 계단 수의 개수를 의미한다. last는 처음에 n이 1인 경우로 초기화되고, 반복문을 통해 n이 1씩 커질 때마다 누적되는 값으로 업데이트한다.

마지막 숫자가 0인 경우와 9인 경우는 그 외의 경우와는 다르게 처리한다. 01의 다음 수로만 가능하며, 98의 다음 수로만 가능하기 때문이다.

결과는 sum(last) % 1000000000으로 출력한다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
n = int(input())

last = [0] + [1] * 9
t = last.copy()

for k in range(n - 1):
    t = last.copy()
    for i in range(10):
        if i == 0:
            last[i] = t[i + 1]
        elif i == 9:
            last[i] = t[i - 1]
        else:
            last[i] = t[i - 1] + t[i + 1]

print(sum(last) % 1000000000)

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

인기 태그