본문 바로가기
Algorithm/BOJ

[BOJ/python3] 2133번 타일 채우기

by DEV Lee 2021. 11. 22.

 

https://www.acmicpc.net/problem/2133

 

2133번: 타일 채우기

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

www.acmicpc.net


문제

3xN 크기의 벽을 2x1, 1x2 크기의 타일로 채우는 경우의 수

 

풀이

DP로 풀면 된다.

11726번 2xn 타일링과 비슷하지만 풀이는 조금 달랐다.

 

[BOJ/C++]11726번 2xn 타일링

https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지..

lionontheshore.tistory.com

처음에 위 문제대로 현재 위치 기준으로만 벽돌 경우를 세다가 애를 먹은 문제...

 

어떤 규칙으로 블록을 채울 수 있는지 생각하고, 그에 맞춰 문제를 풀면 된다.

우선, N이 홀수인 경우는 블록을 채울 수 없다.

 

 

N이 짝수인 경우 다음과 같은 룰로 블록이 추가된다.

i-2인 경우를 제외하고는 다음과 같이 짝수단위로 두 가지의 경우가 있다.

 

 

소스코드

def block(n):
    dp = [0]*31
    dp[0] = 1
    dp[2] = 3

    if n%2 != 0:
        return 0
    if n == 2:
        return dp[2]

    for i in range(4, n+1, 2):
        dp[i] += 3*dp[i-2]
        for j in range(4, i+1, 2):
            dp[i] += 2*dp[i-j]
    return dp[n]


n = int(input())
print(block(n))

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ/python3] 11399번 ATM  (0) 2021.11.25
[BOJ/python3] 2011번 암호코드  (0) 2021.11.23
[BOJ/python3]3052번 나머지  (0) 2021.11.21
[BOJ/python3]2577번 숫자의 개수  (0) 2021.11.21
[BOJ/python3]2562번 최댓값  (0) 2021.11.21

댓글