[Algo] 백준 11727번 ‘2xn 타일링 2’ (python)
[Silver III] 2×n 타일링 2 - 11727
성능 요약
메모리: 31256 KB, 시간: 60 ms
분류
다이나믹 프로그래밍
문제 설명
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×17 직사각형을 채운 한가지 예이다.
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
코드
import sys
n = int(sys.stdin.readline())
dp = [0, 1, 3]
for i in range(3, n+1):
if i % 2 == 0:
dp.append(sum(dp) + 2)
else:
dp.append(sum(dp) + 1)
print(dp[n] % 10007)
코드 리뷰
이 문제는 2xn타일링과 마찬가지로 그림을 그려가며 규칙을 찾아야 풀 수 있는 문제인것 같다. 이걸 그림을 안그려보고 직관으로 풀 수 있는 사람이 있을지는 모르겠다. 모르겠으면 그려보자! 어쨋든 규칙은 짝수번째 개수는 그 전 모든 개수를 합한 것 + 2 이고, 홀수번째 개수는 그 전 모든 개수를 합한 것 + 1 이다.
댓글남기기