Programming/백준

백준 11726 - 2 x n 타일링 (파이썬)

pental 2025. 2. 21. 22:58

분류 : 다이나믹 프로그래밍

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

풀이

점화식을 새워야 한다. 일단 An : 2 * n 타일을 1 * 2, 2 * 1 타일로 채우는 경우의 수를 생각해야한다.

An = A(n - 1) + A(n - 2) 라는 점화식을 세울 수 있다.

  1. 즉 이 문제를 생각해 보면, 숫자가 너무 커지기 때문에 일단 10007로 나눈다는 조건을 생각해야한다.
  2. 먼저 dp 배열에 들어갈 초기 값을 생각한다.
    1. 1번의 dp는 2 * 1 타일에 들어 갈수 있는 타일은 1개이다.
    2. 2번의 dp는 2 * 2 타일에 들어 갈 수 있는 타일은 총 2개이다.
      1. 1 * 2 타일 2개인 방법 1개
      2. 2 * 1 타일 2개인 방법 1개
  3. 예시를 생각해보자, 2 * 5 크기의 직사각형을 채운 한 가지 방법의 예를 확인해본다.
    1. 2 * 1 타일 3개
    2. 1 * 2 타일 2개

점화식을 세워서 생각해보면 An = A(n - 1) + A(n - 2) 라는 점화식을 세울 수 있다.

코드

# 백준 11726 - 2 x n 타일링
# 분류 : 다이나믹 프로그래밍

N = int(input())
mod = 10007

dp = [0] * 1001
dp[1] = 1
dp[2] = 2

for i in range(3, N + 1) :
    dp[i] = dp[i - 1] + dp[i - 2]
    dp[i] %= mod

print(dp[N])