[Baekjoon] 11727. 2xn 타일링 2

less than 1 minute read

문제 설명

문제

2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

아래 그림은 2×17 직사각형을 채운 한가지 예이다.

img

입력

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

출력

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

예제 입력 1

2

예제 출력 1

3

예제 입력 2

8

예제 출력 2

171

예제 입력 3

12

예제 출력 3

2731

출처

알고리즘 분류


문제 풀이

# DynamicProgramming

DynamicProgramming을 이용하는 문제입니다.


풀이 과정

Programmers에서 2xn 타일링 문제를 풀었었는데, 그 문제의 다른 버전입니다.

더 어려울 것은 없고, 2xn 타일링 문제에서 점화식을 구하는 과정을 이해했다면 이 문제도 쉽게 풀었을 것입니다.


전체 코드

n = int(input())
dp = [0 for _ in range(n+1)]
dp[1] = 1
if n >= 2: dp[2] = 3
for i in range(3,n+1):
    dp[i] = (dp[i-1] + 2*dp[i-2])%10007
print(dp[n])


배운 점

Leave a comment