알고리즘 문제풀이/백준문제풀이
[백준문제풀이] 11727 2xn 타일링 2
로디네로
2020. 12. 29. 01:25
반응형
풀이일시 : 2020-08-09
문제 :
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
입력:
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력:
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
풀이 :
점화식을 만들어보자
가장 마지막에 오는 타일을 생각해봤을 때 가능 한 경우의 수를 생각해본다면
1. 1x2 타일 (그 앞엔 N-1개)
2. 2x1 타일 (그 앞엔 N-2개)
3. 2x2 타일 (그 앞엔 N-2개)
점화식 D[i]=D[i-1]+2*D[i-2] 를 도출해 낼 수 있다.
DP에 대한 포스팅이다. 점화식을 쓰는것은 이 알고리즘을 사용한것이다.
dbstndi6316.tistory.com/35?category=953970
[개념정리] DP 동적프로그래밍
Dynamic Programing, DP, 동적프로그래밍, 동적계획법 으로 중요한 알고리즘 중 하나이다. DP란 큰 문제를 작은 문제로 나눠서 푸는 알고리즘이다. 방식은 분할정복과 같으나 분할정복은 계산한 부
dbstndi6316.tistory.com
#include <iostream>
using namespace std;
int d[1001];
int dp(int x) {
if (x == 1) return 1;
if (x == 2) return 3; //3가지 경우의 수
if (d[x] != 0) return d[x];
return d[x] = (dp(x - 1) + 2 * dp(x - 2)) % 10007; //N-2개가 남는 상황이 두개가있음
}
int main() {
int x;
cin >> x;
printf("%d", dp(x));
}
반응형