티스토리 뷰

PS

11727. 2 x n 타일링2

tose33 2020. 8. 5. 16:59

 

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

 

11727번: 2×n 타일링 2

2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다.

www.acmicpc.net

 

이번에는 2 x n 직사각형을 2 x 1, 1 x 2에 추가로 2 x 2 타일로 채우는 방법의 수를 구하는 것이다.

 

마찬가지로 d[n]은

d[n] : 2 x n 직사각형을 2 x 1, 1 x 2, 2 x 2 타일로 채우는 방법의 총 가지 수

 

2 x n 타일링 1번 문제에서 2 x 2 타일만 추가됐다.

그리고 2 x 2 타일을 추가하는 건 그냥 1 x 2타일 두 개를 붙인 것과 같다.

 

d[n] = d[n - 1] + d[n - 2] + d[n - 2]

 

 

arr = [0] * 1001


def dp(a):
    if a <= 2: return a  # base check

    if arr[a] > 0: return arr[a]  # memoization

    arr[a] = dp(a - 2) + dp(a - 1)
    return arr[a]


n = int(input())  # 2 x n

for i in range(n + 1):
    arr[i] = dp(i)

print(arr[n] % 10007)

2 x n 타일링 1 문제에서 점화식만 살짝 바꾸면 된다.

'PS' 카테고리의 다른 글

9095. 1,2,3 더하기  (0) 2020.08.05
1463. 1로 만들기  (0) 2020.08.05
11726. 2 x n 타일링  (0) 2020.08.05
2331. 반복수열  (0) 2020.08.04
10451. 순열 사이클  (0) 2020.08.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
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
글 보관함