1. 문제와 예제
(문제링크: https://www.acmicpc.net/problem/11727)
11727번: 2×n 타일링 2
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다.
www.acmicpc.net
2. 전체 코드
# 입력 받기
n = int(input()) # 2xn 크기의 직사각형
lst = [0, 1, 3] # 채우는 방법 수 리스트
for _ in range(998):
lst.append(lst[-1] + lst[-2]*2)
# 결과 출력하기
print(lst[n] % 10007)
3. 코드 해설
2x(n-1) 직사각형 우측에 2x1 직사각형을 하나 붙인다고 생각하고 가짓수가 어떻게 변하는지 생각해보면,
1. 2x1 직사각형을 2x1로 사용하면 2x(n-1) 직사각형을 채우는 가짓수와 같고
2. 2x1 직사각형을 포함하여 2x1 직사각형으로 사용하면 2x(n-2) 직사각형을 채우는 가짓수와 같고
3. 2x2 직사각형으로 사용하면 마찬가지로 2x(n-2) 직사각형을 채우는 가짓수와 같다.
따라서 2xn 직사각형을 채우는 방법의 가짓수 = 2x(n-1) 가짓수 + 2x(n-2) 가짓수 * 2 이다.
'Coding Test > Baekjoon' 카테고리의 다른 글
[백준] 11726번 파이썬 (2xn 타일링) (0) | 2024.03.31 |
---|---|
[백준] 11659번 파이썬 (구간 합 구하기 4) (0) | 2024.03.31 |
[백준] 9461번 파이썬 (파도반 수열) (0) | 2024.03.29 |
[백준] 9375번 파이썬 (패션왕 신해빈) (0) | 2024.03.29 |
[백준] 9095번 파이썬 (1, 2, 3 더하기) (0) | 2024.03.24 |