C++ 백준 11726번
by 너나나백준 11726번 www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
문제 : 2 × n 크기의 직사각형을 1 × 2, 2 ×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
출력값이 답을 10007로 나눈 나머지 라는 거 까먹지 말자!! 이거 때문에 계속 틀렸다!!
이것도 다이나믹 프로그래밍인데 2xn 직사각형을 채우는 방법의 수를 d(n)으로 생각하면
2xn 직사각형을 만들기 위해서 마지막에 1x2타일을 2개 놓거나 2x1타일을 하나 놓는 경우를 생각해보면 d(n-1) + d(n-2)가 총방법의 수가 될 것이다.
#include<iostream>
using namespace std;
int d[1000];
int go(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
if (d[n] > 0) return d[n]; // memoization
d[n] = (go(n - 1) + go(n - 2))%10007;
return d[n];
}
int main() {
int t;
cin >> t;
cout << go(t) << '\n';
}
'study > 알고리즘' 카테고리의 다른 글
C++ 백준 2193번 (0) | 2021.01.01 |
---|---|
C++ 백준 10844번 (0) | 2021.01.01 |
C++ 백준 1463번 (0) | 2020.12.30 |
C++ 백준 2748번 (0) | 2020.12.29 |
C++ 알고리즘 - 다이나믹 프로그래밍 (0) | 2020.12.28 |
블로그의 정보
공부 기록
너나나