[백준 파이썬] 2133 타일 채우기

 

2133번: 타일 채우기

3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.

www.acmicpc.net

 

문제



주어진 타일을 이용해서 타일을 완성시키는 경우의 수를 출력하는 문제이다.


풀이

먼저 타일을 배치할 수 있는 경우의 수를 구해야한다.

n이 홀수일 경우 타일을 배치할 칸이 부족하므로 경우의 수가 0이된다.

 

n = 2 의 경우는 다음과 같다.

 

n = 4 의 경우 고유한 모양 2개 + n = 2일 때의 모양의 조합 9가지 = 11가지가 된다.

 

n = 6 의 경우 끝부분의 n이 2, 4, 6인 경우를 모두 더해주면 된다.

이 때 6인경우는 고유패턴 2가지이므로 2를 더해주면 된다.

이런식으로 짝수의 경우를 모두 표현할 수 있다.

 

해당 식을 그림으로 나타내면 다음과 같다.

 

 

코드로 나타내면 다음과 같다.

dp[i] = dp[i - 2] * 3 + sum(dp[:i-2]) * 2 + 2

 

 

 

코드

N = int(input())

dp = [0 for _ in range(31)]
dp[2] = 3


for i in range(4, N + 1):
    if i % 2 == 0 :
        dp[i] = dp[i - 2] * 3 + sum(dp[:i-2]) * 2 + 2
    else:
        dp[i] = 0

print(dp[N])

 

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

[백준 파이썬] 1068 트리  (0) 2024.02.26
[백준 파이썬] 1068 트리  (1) 2024.02.25
[백준 파이썬] 2294 동전 2  (1) 2024.02.19
[백준 파이썬] 16236 아기 상어  (0) 2024.02.17
[백준 파이썬] 1987 알파벳  (1) 2024.02.15