티스토리 뷰

https://icpc.me/10844

# 문제 분류
Dynamic Programming

풀이 접근 방법 :

 

1. 0으로 시작하는 수는 없다는 점을 생각하며 DP 테이블을 작성해보자.

2. 그러면 0 → 1 만 가능, 9 → 8 만 가능하다는 것이 보이게 된다.

3. dp[0] = prev[1], dp[9] = prev[8], dp[n] = prev[n-1] + prev[n+1] (n != 0, 9)로 점화식을 세울 수 있다.


밑 python 코드에서는 tmp 배열이 prev의 역할을 하며, 계속해서 갱신된 dp 배열을 tmp 배열로 deepcopy 해주는 방식.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import copy as cp
 
size = int(input())
 
dp = [1 for i in range(10)]
dp[0= 0
cpy = [0 for i in range(10)]
 
for i in range(size-1):
    tmp = cp.deepcopy(cpy)
    tmp[0= dp[1]
    tmp[9= dp[8]
    for j in range(19):
        tmp[j] = dp[j-1+ dp[j+1]
    dp = cp.deepcopy(tmp)
 
print(sum(dp) % 1000000000)
 
cs

'Problem Solving > BOJ Solution' 카테고리의 다른 글

BOJ #9465 - 스티커  (0) 2019.10.06
BOJ #11060 - 점프 점프  (0) 2019.10.03
BOJ #4485 - 녹색 옷 입은 애가 젤다지?  (0) 2019.10.01
BOJ #1389 - 케빈 베이컨의 6단계 법칙  (0) 2019.10.01
BOJ #1238 - 파티  (0) 2019.10.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함