티스토리 뷰
문제 링크
https://algospot.com/judge/problem/read/QUADTREE
algospot.com :: QUADTREE
쿼드 트리 뒤집기 문제 정보 문제 대량의 좌표 데이터를 메모리 안에 압축해 저장하기 위해 사용하는 여러 기법 중 쿼드 트리(quad tree)란 것이 있습니다. 주어진 공간을 항상 4개로 분할해 재귀적으로 표현하기 때문에 쿼드 트리라는 이름이 붙었는데, 이의 유명한 사용처 중 하나는 검은 색과 흰 색밖에 없는 흑백 그림을 압축해 표현하는 것입니다. 쿼드 트리는 2N × 2N 크기의 흑백 그림을 다음과 같은 과정을 거쳐 문자열로 압축합니다. 이 그림의 모든
algospot.com
흑, 백으로 표시된 쿼드트리를 상하로 반전하여 출력해주는 문제입니다.
쿼드트리는 4분할로 나눠져있는 정사각형의 형태로 분할된 정사각형도 마찬가지로 4분할로 나뉠 수 있습니다.
따라서 분할된 각 부분을 재귀호출하여 계산하고 마지막에 결과를 합칠 수 있습니다.
쿼드트리는 문자열로 표현이 되고 검은 색은 b, 흰 색은 w로 표시합니다.
그리고 큰사각형의 4 픽셀이 모두 같은 색이 아닐 경우에는 x로 시작하고 내부 색깔에 따라 이어집니다.

사각형의 전체 색깔이 같으면 해당 문자를 반환합니다.
그렇지않으면 사각형을 4분할하여 각 분할된 사각형을 다시 재귀호출하여 분할된 사각형의 전체 색깔이 같은지를 다시 확인합니다.
이러한 방식으로 사각형의 전체 색깔이 같을 때 까지 4분할로 재귀호출하고 색깔이 같으면 문자를 반환하여 합쳐야 합니다.

구현 코드
#include <iostream> | |
#include <string> | |
using namespace std; | |
//문자열의 반복자를 인자로 사용 | |
string reverse(string::iterator& it){ | |
char head = *it; | |
++it; | |
//문자열의 첫 문자가 b나 w인 경우(사각형의 색이 같은 경우) 문자 그대로 반환 | |
if(head == 'b' || head == 'w') | |
return string(1, head); | |
//인자로 받은 문자열의 첫 번째 문자를 제외하고 나머지 문자열을 통해 재귀 호출 | |
string upperLeft = reverse(it); | |
string upperRight = reverse(it); | |
string lowerLeft = reverse(it); | |
string lowerRight = reverse(it); | |
//위, 아래 조각들을 반대로 교체한다. | |
return string("x") + lowerLeft + lowerRight + upperLeft + upperRight; | |
} | |
int main(){ | |
string str; | |
int _; | |
cin >> _; | |
while(_--){ | |
cin >> str; | |
string::iterator it = str.begin(); | |
cout << reverse(it) << endl; | |
} | |
return 0; | |
} |
'Coding Test > 알고스팟' 카테고리의 다른 글
[C++] 알고스팟/분할정복 - 팬미팅 (0) | 2020.08.09 |
---|---|
[C++] 알고스팟/분할정복 - 울타리 잘라내기 (0) | 2020.03.31 |
[C++] 알고스팟/비트마스크 - 졸업 학기 (0) | 2020.03.29 |
[C++] 알고스팟/완전탐색 - Synchronizing Clocks (0) | 2020.01.18 |
[C++] 알고스팟/완전탐색 - 게임판 덮기 (0) | 2020.01.11 |
- Total
- Today
- Yesterday
- 스파크
- HiveQL
- python
- import
- 완전탐색
- Hadoop
- 하둡
- Django
- Jaeha's Safe
- 외발 뛰기
- 팰린드롬 구하기
- 합친 lis
- hive
- 종만북
- pyspark
- 삼각형 위의 최대 경로
- 하이브
- Sqoop
- 2225
- HDFS
- C++
- 백준
- 알고스팟
- 코딩인터뷰 완전분석
- 분할정복
- 삼각형 위의 최대 경로 수 세기
- microwaving lunch boxes
- 배열과 문자열
- 출전 순서 정하기
- 두니발 박사의 탈옥
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |