문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
문제 풀이
1x2, 2x1 타일로 2xn 크기의 직사각형을 채우는
방법의 수를 구하는 문제입니다.
아래 표는 n이 1, 2, 3, 4일 때
각각 직사각형을 채울 수 있는 방법의 수를 표로 나타낸 것입니다.
1 | 2 | 3 | 4 | |
Answer | 1 | 2 | 3 | 5 |
표를 통해 규칙을 파악해보면,
현재의 값은 첫번째 전, 두번째 전 값을 더한 값이라는 것을 알 수 있습니다.
따라서 이러한 규칙성을 이용해
DP를 이용하여 문제를 해결했습니다.
My Code
n = int(input()) # 직사각형 가로 크기
dp = [0] * 1001 # 필요한 타일 수를 저장할 list
dp[1] = 1 # 2x1 직사각형 만드는데 필요한 타일 수는 1
dp[2] = 2 # 2x2 직사각형 만드는데 필요한 타일 수는 2
for i in range(3, n + 1): # 3부터 반복
# 첫번째, 두번째 전 값을 더해 현재 값을 갱신
dp[i] = dp[i - 1] + dp[i - 2]
print(dp[n] % 10007) # 10007로 나눈 나머지 출력
'백준(Python) 풀이' 카테고리의 다른 글
백준 2579번. 계단 오르기 (Python / 파이썬) (0) | 2022.04.20 |
---|---|
백준 1149번. RGB 거리 (Python / 파이썬) (0) | 2022.04.20 |
백준 9095번. 1, 2, 3 더하기 (Python / 파이썬) (0) | 2022.04.20 |
백준 1003번. 피보나치 함수 (Python / 파이썬) (0) | 2022.04.20 |
백준 1932번. 정수 삼각형 (Python / 파이썬) (0) | 2022.04.20 |
댓글