티스토리 뷰

Algorithm/BOJ

백준 2133번 C++

poopooreum 2023. 8. 4. 19:13
반응형
백준 2133번 타일 채우기

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

2133번: 타일 채우기

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

www.acmicpc.net



정답 코드

#include<stdio.h>
int find(int a);
int dp[31];
int main() {
	int n;
	scanf("%d", &n);
	printf("%d", find(n));
}
int find(int a)
{    
    if(a==0)
        return 1;
    if(a==1)
        return 0;
    if(a==2)
        return 3;
	if (dp[a] != 0)
		return dp[a];
	dp[a] = 3 * find(a - 2);
	for (int x = 4; x <= a;x++) 
	{
		if (x % 2 == 0)
		{
			dp[a]+= 2 * find(a - x);
		}
	}
	return dp[a];

}

문제 풀이

dp를 이용하는 문제이면서, 수학적인 사고력을 요구하는 문제입니다. 주어진 숫자들의 예시를 보면서 공식을 찾아야 합니다.
1)3가지 패턴이 이전 칸인 6칸 경우에 채워들어가므로 6칸 경우 * 3만큼 채워집니다. + (41 * 3)

2) 4칸에서 발생한 족보없는 패턴 2가지가 4칸 경우 * 2만큼 채워집니다. + (11 * 2)

3) 6칸에서 발생한 족보없는 패턴 2가지가 2칸 경우 * 2만큼 채워집니다. + (3 * 2)

4) 8칸에서도 족보없는 패턴이 2가지가 나오므로 +2를 해줍니다.

반응형

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

백준 2164번 C++  (0) 2023.08.04
백준 2161번 C++  (0) 2023.08.04
백준 2108번 C++  (0) 2023.08.04
백준 2003번 C++  (0) 2023.08.04
백준 1991번 C++  (0) 2023.08.04
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함