시간 제한 : 2초
메모리 제한 : 128MB
입력
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1≤N ≤64의 범위를 가진다. 두 번째 줄부터는 길이 N 의 문자열이 N 개 들어온다. 각 문자열은 0 또는 1의 숫자로 이루어져 있으며, 영상의 각 점들을 나타낸다.
출력
영상을 압축한 결과를 출력한다.
소스코드
#include <iostream> #include <vector> #include <string> using namespace std; vector<vector<int> > tree; void quadtree(int row, int col, int n) { if (n == 1) { cout << tree[row][col]; return; } int color = tree[row][col]; bool check = false; for (int i = 0; i < n && !check; i++) for (int j = 0; j < n && !check; j++) if (color != tree[row + i][col + j]) check = true; if (!check) cout << color; else { cout << "("; quadtree(row, col, n / 2); quadtree(row, col + n / 2, n / 2); quadtree(row + n / 2, col, n / 2); quadtree(row + n / 2, col + n / 2, n / 2); cout << ")"; } } int main(void) { int n; cin >> n; vector<string> input(n); for (int i = 0; i < n; i++) cin >> input[i]; for (int i = 0; i < n; i++) { tree.push_back(vector<int>(n, 0)); for (int j = 0; j < n; j++) tree[i][j] = (int)(input[i][j] - '0'); } quadtree(0, 0, n); }
Tip
재귀로 푸는 문제다. 사이즈가 n일 때 간소화할 수 있는지 확인해보고, 없으면 n/2로 다시 쪼개서 각 사분면을 조사하는 방식으로 접근한다. 이렇게 무한히 쪼개다가 크기가 1이 되면 더 이상 쪼갤 수 없으므로, 그 때의 컬러를 출력하면 된다.
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 2018 - 수들의 합 5 (0) | 2018.11.24 |
---|---|
백준] 9661 - 돌 게임 7 (0) | 2018.11.10 |
백준] 7568 - 덩치(한국정보올림피아드 2013;KOI 2013 지역본선) (0) | 2018.11.03 |
백준] 6160 - Election Time(USACO 2008) (0) | 2018.10.30 |
백준] 13163 - 닉네임에 갓 붙이기(UCPC 2016) (0) | 2018.10.30 |