-
알고스팟 타일링 TILING2 미완PS 2020. 1. 22. 03:14
https://algospot.com/judge/problem/read/TILING2
algospot.com :: TILING2
타일링 문제 정보 문제 2xn 크기의 사각형을 2x1 크기의 사각형으로 빈틈없이 채우는 경우의 수를 구하는 프로그램을 작성하세요. 예를 들어 n=5라고 하면 다음 그림과 같이 여덟 가지의 방법이 있습니다. 경우의 수는 n이 커지면 아주 커질 수 있으므로, 1000000007으로 나눈 값을 대신 출력하세요. 입력 입력의 첫 줄에는 테스트 케이스의 수(C <= 50)가 주어집니다. 그후 C줄에 각각 1개의 자연수로 n(1 <= n <= 100)이 주어집니다.
algospot.com
<접근방법>
이 문제를 처음 풀 때는 접근을 어떻게 할 지 몰라 막막했다.
그럴 때는 순서대로 예제를 만들어나가면서 규칙을 발견하는 것이 하나의 방법이다.
그림을 보면 하나의 규칙이 나온다는 것을 알 수 있다.
이것을 점화식으로 나타내보자.
점화식 기저사례에 유의하여 구현한다.
<코드>
#include <iostream> #include <algorithm> #include <memory.h> using namespace std; int tc, n; int a[101][101], cache[101][101]; //좌표를 받아서 최대 경로의 갯수를 출력 int find(int y, int x) { if (y == n - 1) return 0; int &res = cache[y][x]; if (res != -1) { cache[y][x]++; return res; } int now_val = a[y][x]; res = max(find(y+1, x+1) + now_val, find(y+1, x) + now_val); return cache[y][x]; } int main() { cin >> tc; while (tc--) { memset(cache, -1, sizeof(cache)); cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { cin >> a[i][j]; } } cout << find(0, 0) << '\n'; } return 0; }
<느낀 점>
점화식의 규칙이 나오는 이유는 모르겠다..
전의 것이랑 합쳐서 사각형을 만들고 사각형 내부에서 위치 바꾸면서 모양 다르게 한다?
[참고]
-프로그래밍 대회에서 배우는 알고리즘 문제해결전략1
반응형'PS' 카테고리의 다른 글
알고스팟 Quantization (0) 2020.01.24 알고스팟 원주율 외우기 PI (0) 2020.01.22 알고스팟 최대 증가 부분 수열 LIS (0) 2020.01.20 알고스팟 팬미팅 FANMEETING (0) 2020.01.17 알고스팟 시계맞추기 Synchronizing Clocks (0) 2020.01.15