[Python] 10844번

체인지영·2021년 3월 29일
0

[Python] 백준

목록 보기
4/12

동적프로그래밍
1. Top-down: 메모이제이션
2. Buttom-up :상향식 계산법

       0 1 2 3 4 5 6 7 8 9
1개    0  1 1 1 1 1 1 1 1 1 
2개    1  1 2 2 2 2 2 2 2 1
3개    1  3 3 4 4 4 4 4 3 2
4개    3  4 7 7 8 8 8 7 6 3

dp = [[]for _ in range(N)]
dp[0] = [0,1,1,1,1,1,1,1,1,1]
dp[1] = [dp[1],dp[0]+dp[2],dp[1]+dp[3]....]
import sys

N = int(sys.stdin.readline())
dp = [[0 for col in range(10)] for _ in range(N)]
dp[0] = [0,1,1,1,1,1,1,1,1,1]

for i in range(N):
   if i ==0:
       continue
   else:
       dp[i] = [dp[i-1][1],dp[i-1][0]+dp[i-1][2],dp[i-1][1]+dp[i-1][3],dp[i-1][2]+dp[i-1][4],dp[i-1][3]+dp[i-1][5],dp[i-1][4]+dp[i-1][6],dp[i-1][5]+dp[i-1][7],dp[i-1][6]+dp[i-1][8],dp[i-1][7]+dp[i-1][9],dp[i-1][8]]
s=0
for i in dp[N-1]:
   s+=i
print(s % 1000000000)
import sys

N = int(sys.stdin.readline())
dp = [[0 for col in range(10)] for _ in range(N)]
dp[0] = [0,1,1,1,1,1,1,1,1,1]

for i in range(N):
    if i ==0:
        continue
    else:
        for k in range(10):
            if k == 0:
                dp[i][k] = dp[i-1][1]
            elif k==9:
                dp[i][k] = dp[i-1][8]
            else:
                dp[i][k] = dp[i-1][k-1]+dp[i-1][k+1]

s=0
for i in dp[N-1]:
    s+=i
print(s % 1000000000)
profile
Startup, FrontEnd, BlockChain Developer

0개의 댓글