본문 바로가기
백준(Python) 풀이

백준 11726번. 2xn 타일링 (Python / 파이썬)

by yewonnie 2022. 4. 20.

문제

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

입력

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

출력

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

문제 풀이

1x2, 2x1 타일로 2xn 크기의 직사각형을 채우는

방법의 수를 구하는 문제입니다.

아래 표는 n이 1, 2, 3, 4일 때

각각 직사각형을 채울 수 있는 방법의 수를 표로 나타낸 것입니다.

  1 2 3 4
Answer 1 2 3 5

표를 통해 규칙을 파악해보면,

현재의 값은 첫번째 전, 두번째 전 값을 더한 값이라는 것을 알 수 있습니다.

따라서 이러한 규칙성을 이용해 

DP를 이용하여 문제를 해결했습니다.


My Code

n = int(input()) # 직사각형 가로 크기

dp = [0] * 1001 # 필요한 타일 수를 저장할 list
dp[1] = 1 # 2x1 직사각형 만드는데 필요한 타일 수는 1
dp[2] = 2 # 2x2 직사각형 만드는데 필요한 타일 수는 2

for i in range(3, n + 1): # 3부터 반복
    # 첫번째, 두번째 전 값을 더해 현재 값을 갱신
    dp[i] = dp[i - 1] + dp[i - 2]

print(dp[n] % 10007) # 10007로 나눈 나머지 출력

댓글