BAEKJOON/알고리즘

[BOJ] 11727번 : 2xN 타일링 2

말하는 알감자 2024. 1. 30. 00:23

🔒 문제

⌨ 입력

🖨 출력

📚 예제

📌 풀이

위의 그림을 보면 n이 1이고, 2인 경우를 제외하면 n이 3부터는 규칙이 생기는 것을 알 수 있다.

2 x n을 만들기 위해서는 2가지 방법이 있다.

  1. 2 x (n - 1) 인 경우에 1 x 2 타일 1개 붙이기
  2. 2 x (n - 2) 인 경우에 2 x 2 타일이나 2 x 1 타일 2개 붙이기

그래서 식으로 적으면 dp[n] = dp[n - 1] + dp[n - 2] * 2가 된다.

위의 그림을 보면 이해가 더 쉬울 것이다.

분홍색 형광펜으로 네모 표시를 한 부분들이 바로 이전 타일들에 추가된 부분들이다.

아래는 dp 식을 정리한 것이다.

dp를 위한 배열을 만들 때, n이 아닌, n + 1 배열로 만드는 것이 편하다.

🔑 python 코드

# 2xN 타일링 2
import sys
input = sys.stdin.readline
n = int(input())

if(n == 1):
    print(1)
elif(n == 2):
    print(3)
else:
    dp = [0 for _ in range(n + 1)]
    dp[1], dp[2] = 1, 3
    for i in range(3, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2] * 2

    print(dp[n] % 10007)

'BAEKJOON > 알고리즘' 카테고리의 다른 글

[BOJ] 2193번 : 이친수  (1) 2024.01.30
[BOJ] 1789번 : 수들의 합  (1) 2024.01.29
[BOJ] 1974번 : Z  (0) 2024.01.28
[BOJ] 16953번 : A -> B  (1) 2024.01.22
[BOJ] 1012번 : 유기농 배추  (1) 2024.01.03