
⛰️ 문제
https://www.acmicpc.net/problem/10844
인접한 모든 자리의 차이가 1인 수를 계단 수라고 함
N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하기
0으로 시작하는 수는 계단수가 아님
🧠 접근 방법
- 가장 뒤에 오는 수를 기준으로 개수를 찾음

입력
- N: 길이
- 1보다 크거나 같고, 100보다 작거나 같은 자연수
출력
- 정답을 1000000000으로 나눈 나머지
👩🏻💻 코드
for i in range(10):
if i == 0:
continue
DP[1][i] = 1
길이가 1일 때의 초기값을 설정해줍니다.
for i in range(2, N+1):
for j in range(10):
# 앞에는 1밖에 올 수 없음
if j == 0:
DP[i][j] = DP[i-1][j+1]
# 앞에는 8밖에 올 수 없음
elif j == 9:
DP[i][j] = DP[i-1][j-1]
# 앞에 1 작은 것, 1 큰 것 두 가지가 올 수 있음
else:
DP[i][j] = DP[i-1][j-1] + DP[i-1][j+1]
루프를 돌면서 j가 0일 때(앞에는 1밖에 올 수 없습니다.), 9일 때(앞에는 8밖에 올 수 없습니다.), 1~8일 때(앞에 1 작은 수, 1 큰 수, 두 가지가 올 수 있습니다.)로 나눠서 점화식을 넣습니다.
📑 전체 코드
# 쉬운 계단 수
import sys
N = int(sys.stdin.readline())
DP = [[0]*10 for _ in range(N+1)]
for i in range(10):
if i == 0:
continue
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[-1]) % 1000000000)
'알고리즘 > Python' 카테고리의 다른 글
[백준/파이썬Python] #1931 회의실 배정: 그리디는 어떤 기준을 세울지 생각하자 🤝 (0) | 2024.07.16 |
---|---|
[백준/파이썬Python] #2098 외판원 순회 : DFS를 이해합시다. 재귀도 🗺️ (0) | 2024.07.15 |
[백준/파이썬Python] #2253 점프 : 퐁당퐁당 인덱스 머리쓰기 🪨 (0) | 2024.07.15 |
[백준/파이썬Python] #11049 행렬곱셈순서 : 인덱스를 주의합시다... 🧮 (0) | 2024.07.15 |
[백준/파이썬Python] #9251 LCS : 문제를 부문제로 잘라보기 🛹 (0) | 2024.07.15 |