3 x n 크기의 네모칸이 있다. 이 칸을 3 x 1 크기의 블럭을 이용하여 겹치지 않고 빼꼭하게 채우는 서로 다른 방법의 가짓수를 구하는 프로그램을 작성하시오. 이 문제를 푸는 .c/.cpp/.java 파일 하나를 제출하시오.
예를 들어, n = 1일때는 1가지, n = 2일 때는 1가지, n = 3일 때는 2가지임을 쉽게 알 수 있다. n=3인 경우를 세 블럭 OOO, XXX, MMM으로 채운 두 가지 경우가 아래 그림과 같다.
OXM OOO
OXM XXX
OXM MMM
입력
표준 입력으로 받는다. n을 나타내는 정수 하나가 주어진다. n은 1 이상 45 이하이다.
출력
표준 출력으로 한 줄에 정수 하나를 출력한다. 이 정수는 문제의 조건을 만족하는 가짓수를 나타낸다.
예제 입력 1
1
예제 출력 1
1
예제 입력 2
3
예제 출력 2
2
예제 입력 3
4
예제 출력 3
3
#include <iostream> using namespace std; // 45 넣어서 조합 계산할때 permutation 값이 2,147,483,647 넘어가기 때문에 long long 으로 설정함. long long Combination(int n, int r) // nCr = nPr / r! { long long p = 1, f = 1, c = 1; for (int i = n; i > n - r; i--) { p = p * i; } if (r) { for (int i = r; i > 0; i--) { f = f * i; } c = p / f; } else c = 1; // nC0 return c; } long long countWays(int n) { long long ways = 0; int tbyt = n / 3; if (tbyt) { for (int i = 0; i <= tbyt; i++) { ways += Combination(n - 2 * i, i); } // n-3t+t = n-2t } else if (!tbyt) ways = 1; return ways; } int main() { int n = 1; // n은 1 이상 45 이하 cin >> n; cout << countWays(n); return 0; }
https://www.geeksforgeeks.org/tiling-with-dominoes/?ref=rp
Tiling with Dominoes - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
점수 10/10
'archive. > Schoolwork' 카테고리의 다른 글
[C++] 자료구조 1주차 과제1 (0) | 2020.08.05 |
---|---|
[C++] 문제해결기법 과제 4: 가장 큰 수 (0) | 2020.08.05 |
[C++] 문제해결기법 과제 2: 포로 수용소 - Convex Hull 응용 (0) | 2020.08.05 |
[C++] 문제해결기법 과제 1 - Flow Network 응용 (0) | 2020.08.05 |
[Python] 인공지능입문 과제 - Genetic Algorithm (0) | 2020.07.15 |