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이 짝수인 경우 다음과 같은 룰로 블록이 추가된다.
소스코드
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 |
댓글