문제
10844번: 쉬운 계단 수
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
풀이
0을 제외한 모든 숫자는 앞에 올 수 있다.
이때 1~8은 뒤에 올 수 있는 숫자가 총 2종류이다(숫자±1).
하지만 9 뒤엔 오직 숫자 8만이 올 수 있다.
이를 그림으로 표현하면 다음과 같다.
dp테이블은 이차원 리스트이며 dp[자리 수][앞에 오는 숫자]=경우의 수이다.
정리하면 다음과 같다.
앞에 오는 숫자 = 0 )
dp[자리 수][0] = dp[자리 수 - 1][1]
※ dp[1][0] = 0이기 때문에 어차피 결과엔 영향을 미치지 않는다.
ex) 0, 01, 012 -> 안 셈!
앞에 오는 숫자 = 1~8 )
dp[자리 수][앞에 오는 숫자] = dp[자리 수 - 1][앞에 오는 숫자 -1] + dp[자리 수 - 1][앞에 오는 숫자 + 1]
dp[n][i] = dp[n][i-1] + dp
앞에 오는 숫자 =9 )
dp[자리 수][9] = dp[자리 수 - 1][8]
코드
N = int(input())
dp = [[0]*10 for _ in range(N+1)]
for i in range(1, 10):
dp[1][i] = 1
MOD = 1000000000
for i in range(2, N+1):
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]
else:
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
print(sum(dp[N]) % MOD)
'CS > 알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 14502 - 연구소 [Python(파이썬)] (0) | 2021.01.06 |
---|---|
[백준] 11052 - 카드 구매하기 [Python(파이썬)] (0) | 2021.01.06 |
[백준] 1149 - RGB거리 [Python(파이썬)] (0) | 2021.01.06 |
[백준] 4948 - 베르트랑 공준 [Python(파이썬)] (0) | 2021.01.02 |
[백준] 14725 - 개미굴 [Python(파이썬)] (0) | 2021.01.01 |