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

입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
예제 입력
8
예제 출력
171
풀이
2 x 1인 타일을 기준으로 최대 n개부터 0개를 사용할 때 경우의 수를 계산했다.
- 1 x 2 타일은 반드시 2개를 사용하여 2 x 2로 만들어 사용이 가능하다.
- 따라서, 2 x 2와 1 x 2는 하나로 통일해서 처리한 후 (2^사용 개수)로 경우의 수를 구할 수 있다.
1. y는 가로길이이며, 2 x 1 타일을 사용한 후 남은 길이가 짝수여야 2 x 2 타일을 사용할 수 있다.
2. y가 2로 떨어지면 cnt는 y 를 2로 나눈 몫이 되고, i가 0이 아니면 아래 코드와 같이 math.comb 를 활용하여 모든 경우의 수를 구할 수 있다.
3. i 가 0인 경우 2 x 2 타일만 쓰므로 모든 경우의 수는 (2^cnt) 로 구할 수 있다.
import math
n = int(input())
ans = 0
for i in range(n, -1, -1):
y = n - i
if y % 2 == 0:
cnt = y // 2
if i != 0:
tmp = math.comb(i + cnt, cnt)
ans += tmp * (2 ** cnt)
else:
ans += 2 ** cnt
ans %= 10007
print(ans)
728x90
'coding_test' 카테고리의 다른 글
[백준] 12872. 플레이리스트 (파이썬) (0) | 2024.05.21 |
---|---|
[백준] 11054. 가장 긴 바이토닉 부분 수열 (파이썬) (0) | 2024.05.20 |
[백준] 2225. 합분해 (파이썬) (0) | 2024.05.20 |
[백준] 11052. 카드 구매하기 (파이썬) (0) | 2024.05.20 |
[백준] 15990. 1,2,3 더하기 5 (파이썬) (0) | 2024.05.17 |