[백준/BOJ] 백준 11726번 : 2×n 타일링

2020. 7. 20. 21:47알고리즘 문제풀이

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

 

11726번: 2×n 타일링

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

www.acmicpc.net

2Xn 직사각형을 왼쪽부터 2X1타일로 채운 경우와, 1X2타일 2개로 채운 경우를 모두 고려한다.

 

코드

#include <iostream>
#include <cstring>
using namespace std;

int cache[1001];
int MOD = 10007;

int solve(int n)
{

	//기저 사례
	if (n == 2)
		return 2;
	else if (n == 1)
		return 1;

	int& ret = cache[n];

	//ret가 -1이 아니면 이전에 계산했던것이다
	if (ret != -1)
		return ret;

	//왼쪽을 2X1타일로 채운 경우와, 1X2타일 2개로 채운 경우를 모두 구한다 
	ret = solve(n - 1) + solve(n - 2);
	ret %= MOD;

	return ret;
}

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	//cache를 -1로 초기화 한다
	memset(cache, -1, sizeof(cache));

	int n;
	int result;

	cin >> n;

	result = solve(n);

	cout << result << "\n";

	return 0;
}