728x90
반응형
문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
예제 입력 1 복사
2
예제 출력 1 복사
2
예제 입력 2 복사
9
예제 출력 2 복사
55
[문제 풀이]
다이나믹 프로그래밍의 대표적인 문제이다. 2 x n의 타일링은 일단 가로가 관건이다.
타일은 1x2, 2x1 밖에 없다. n길이의 가로를 채울려면 일단 n-2길이를 채우고 1x2타일을 2개 넣으면된다.
또, n-1길이를 채우고 2x1타일을 채우면 된다.
따라서 다이나믹 프로그래밍에 따라 점화식을 세워보자.
d[i]=d[i-2]+d[i-1]
그리고 초기값을 구하면 된다. d[1]일 때는 2x1밖에 안들어간다. d[1]=1
d[2]는 2x1 타일 2개 아니면 1x2 타일 2개를 쓰면 채워진다. d[2] = 2
초기값을 채우고 나서 나머지 식을 구하면 된다.
#2Xn 타일링
n = int(input())
d = [0]*1001
d[1]=1
d[2]=2
for i in range(3,n+1):
d[i]=d[i-2]+d[i-1]
result = d[n]%10007
print(result)
728x90
반응형
'알고리즘 > 알고리즘 문제' 카테고리의 다른 글
[파이썬] [백준 - 1463번] 1로 만들기 (Dynamic Programming) (0) | 2021.03.24 |
---|---|
[파이썬] [백준 - 2579번] 계단 오르기 (0) | 2021.03.22 |
[파이썬] [백준 2839번] 설탕 배달 (Dynamic Programming) (1) | 2021.03.08 |
[파이썬] [백준-9095번] 1,2,3 더하기 (Dynamic Programming) (0) | 2021.03.08 |
[알고리즘] 체육복 (0) | 2020.10.09 |