Week 4 (Dp) - 문제 11726번 (2×n 타일링)

2023. 7. 22. 15:31백준 문제와 소스 코드

문제:

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

입력:

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

출력:

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

예제 입력1:

2

예제 출력1:

2

예제 입력2:

9

예제 출력2:

55

코드:

#include <iostream>

using namespace std;

long long rst[1001];		//Dp를 사용하기

long long solution(int N)		//함수 구현하기
{
	if (N == 1 || N == 2)		//기저 상태
		return rst[N] = N;

	if (rst[N] > 0)			//이미 구해져있다면 바로 반환
		return rst[N];

	rst[N] = (solution(N - 1) + solution(N - 2)) % 10007;	//점화식 + 문제에서 원하는 출력
	return rst[N];
}

int main()
{
	int n;
	cin >> n;

	cout << solution(n);

	return 0;
}

설명:

주석 참고