728x90
문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
접근
타일의 크기가 커질수록 이전 크기의 타일에 몇개만 추가해주면 그 크기가 된다.
따라서 동적계획법이 쉽게 생각날 수 있었다.
지금의 타일의 개수가 다음 크기의 타일 개수에 영향을 미친다.
구현
현재 크기는 전과 전전의 타일의 개수를 더한 것과 같다.
따라서 dp[i-1] + dp[i-2]로 점화식을 세워 풀어줬다.
import sys
input = sys.stdin.readline
N = int(input())
dp = [0 for _ in range(1000)]
dp[0] = 1
dp[1] = 2
dp[2] = 3
if N <= 3:
answer = dp[N-1]
else:
for idx in range(3, N):
dp[idx] = dp[idx-1] + dp[idx-2]
answer = dp[N-1]
print(answer%10007)
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 1003] 피보나치 함수 (0) | 2021.02.18 |
---|---|
[백준 1932] 정수 삼각형 (0) | 2021.02.17 |
[백준 2579] 계단 오르기 (0) | 2021.02.17 |
[백준 1149] RGB 거리 (0) | 2021.02.17 |
[백준 1652] 누울 자리를 찾아라 (0) | 2021.02.17 |