Algorithm/📊 Problem Solving

[백준/BOJ] 1793 - 타일링

posted by sangmin

1793 - 타일링

문제

2×n 직사각형을 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

아래 그림은 2×17 직사각형을 채운 한가지 예이다.

image

코드

while True:
    try:
        N = int(input())

        dp = [1, 1, 3]

        for i in range(3, N+1):
            dp.append(dp[i-1] + 2 * dp[i-2])
        print(dp[N])
    except:
        break

한마디

다이나믹 프로그래밍의 가장 기본적인 유형인 타일링 문제이다.
i-1 까지 타일이 채워져 있다면 그 다음에 올 타일은 2 X 1짜리 긴 타일 하나뿐이다. 반면 i-2 까지 타일이 채워져 있다면 2 X 2짜리 타일 한 개 혹은 1 X 2짜리 타일 두 개가 올 수 있기 때문에 위와 같이 점화식을 구성했다.

 

1793번: 타일링

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 숫자 0 ≤ n ≤ 250이 주어진다. 

www.acmicpc.net

 

'Algorithm > 📊 Problem Solving' 카테고리의 다른 글

[백준/BOJ] 2565 - 전깃줄  (0) 2021.02.04
[백준/BOJ] 1737 - Pibonacci  (0) 2021.02.04
[백준/BOJ] 1965 - 상자넣기  (0) 2021.02.03
[백준/BOJ] 13301 - 타일 장식물  (0) 2021.02.03
[백준/BOJ] 9625 - BABBA  (0) 2021.02.01