BOJ/Python

[BOJ/백준] 11727 - 2×n 타일링 2 (Python)

tjdms4327 2025. 2. 2. 19:27

문제

문제링크

2*n 크기의 직사각형을 1*2(가로타일), 2*!(세로타일), 2*2(정사각형 타일) 타일로 채우는 방법의 수를 10007로 나눈 나머지를 구하라.

 

풀이

[BOJ/백준] 11726 - 2×n 타일링 (Python)

 

[BOJ/백준] 11726 - 2×n 타일링 (Python)

문제문제링크2*n 크기의 직사각형을 1*2(가로타일), 2*!(세로타일) 타일로 채우는 방법의 수를 10007로 나눈 나머지를 구하라. 풀이n=1일 경우 2*1 타일 한 개만 사용할 수 있다. 이를 if문으로 예외로

tjdms4327.tistory.com

대부분의 풀이는 위 링크와 같다.

정사각형 타일을 맨 끝에 채우는 경우는 가로 타일을 채운 경우와 같다.

따라서 dp[n-2]이므로, dp[n]=(dp[n-2]+dp[n-1])+dp[n-2]가 된다.

 

코드

import sys
input=sys.stdin.readline

n=int(input())
dp=[0]*(n+1)

if n==1:
    print(1)
else:
    dp[1],dp[2]=1,3
    for i in range(3,n+1):
        dp[i]=2*dp[i-2]+dp[i-1]
    print(dp[n]%10007)