공부 기록

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

블로그의 정보

공부 기록

너나나

활동하기