알고리즘 풀이/백준

[백준 11726] 2xn 타일링

mhko411 2021. 2. 17. 22:20
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