티스토리 뷰

Algorithm/BOJ

2133 타일 채우기

henry1214 2019. 10. 13. 18:19

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

 

2133번: 타일 채우기

문제 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다. 출력 첫째 줄에 경우의 수를 출력한다. 예제 입력 1 복사 2 예제 출력 1 복사 3 힌트 아래 그림은 3×12 벽을 타일로 채운 예시이다....

www.acmicpc.net

 

d[i][j] = 3*i를 채우는 방법의 수, i열의 상태는 j

 

상태 다이나믹을 이용해서 경우의 수들을 구할 수 있다. 그림을 그려보면 쉽게 이해할 수 있다. i열을 계산할 때 i-1열은 꽉 차 있어야 한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
 
int n,d[31][8];
 
int main()
{
    scanf("%d",&n);
    d[0][7]=1;
    for(int i=1;i<=n;i++)
    {
        d[i][0]=d[i-1][7];
        d[i][1]=d[i-1][6];
        d[i][2]=d[i-1][5];
        d[i][3]=d[i-1][4]+d[i-1][7];
        d[i][4]=d[i-1][3];
        d[i][5]=d[i-1][2];
        d[i][6]=d[i-1][1]+d[i-1][7];
        d[i][7]=d[i-1][0]+d[i-1][3]+d[i-1][6];
    }
    printf("%d",d[n][7]);
    return 0;
}
cs

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

5573 산책  (0) 2023.11.22
11049 행렬 곱셈 순서  (0) 2019.10.16
12969 ABC  (0) 2019.10.13
1328 고층 빌딩  (0) 2019.10.13
10942 팰린드롬?  (0) 2019.10.12
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday