백준

#[C++] 11726 - 2×n 타일링

maeng-kim 2024. 7. 3. 02:57

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


문제

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

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

입력

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

출력

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


#include <iostream>
using namespace std;

int num[1001];

int dp(int b){
    if(b==1) return num[b]=1;
    if(b==2) return num[b]=2;
    if(num[b]!=0) return num[b];
    return num[b]=(dp(b-1)+dp(b-2)) %10007;
}

int main()
{
    int a;
    cin >> a;
    int sol = dp(a);
    cout << sol;

    return 0;
}

다시 시작하는 백주니입니다..

DP는 해도해도 모르겠으니 DP 위주로 쫌쫌따리 해볼게여

 

이래저래 열심히 그림을 그려보았지만 역시 최고의 방법은 그냥 해보는 것입니다.

처음에는 뭔가 수학적인 느낌으로 접근해보았지만

아닌 것 같아서 그냥 그림 그리면서 했습니다

그렇게 점화식을 찾아서 재귀로 풀었습니ㄷ ㅏ !!