Problem : 쿼드트리
유형 : 분할정복
문제 해석
- 입력에 대해서 쿼드트리로 압축한 결과를 출력하라.
문제 재해석
- 주어진 영상을 4개의 영상으로 나누어 압축 한다는 것은, 4사분면으로 나누고, 나누어진 4분면에 대해서 다시 확인하는 것이다.
해결 전략
- 쪼개기전 범위 크기내 숫자가 전부 같다면, 그 숫자 하나를 출력한다.
- 하나라도 다른 숫자가 있다면, 압축을 한다.
- 압축 한다는 것은, 현재 범위를 4방면으로 쪼갠뒤, 쪼개진 범위 만큼 다시 확인하는 과정을 재귀적으로 반복하는 것이다.
- 중간 지점을 4방면으로 쪼갰을 때 4방면의 숫자가 전부 같다면, 같은 숫자를 출력한다.
- 전부 같지 않다면, 압축을 한다.
- 압축 한다는 것은, 괄호를 열고 같지 않은 부분에 대해서 다시 4방면으로 쪼개는 과정을 재귀적으로 반복하는 것이다.
설계, 구현
{0, 0}
지점 부터 크기만큼 탐색을 시작한다.- 전부 같다면, 같은 숫자 하나를 출력하고 종료한다.
- 같지 않다면 쪼개야 한다.
- 쪼개는 경우, 압축을 하게 되므로 괄호를 연다.
- 4사분면으로 쪼개는 방법은 , x좌표 y 좌표에 대해서
크기의 절반
만큼 더하면 된다. 2 x 2
의 경우,{0,0}
,{0,1}
,{1,0}
,{1,1}
로 쪼갤 수 있게된다.- 다시 재귀적으로 수행한다.
- 괄호를 닫는다.
코드
1 |
|
피드백
- 문제를 보고 5 ~ 10분간 문제 자체를 제대로 이해하지 못했었다.
- 나의 배경 지식을 전부 벗어 던지고, 문제에 적힌 대로만 이해하려고 노력했다.
- 이해를 하고 다시 입출력을 보니 규칙성이 보였다.
- 분할 정복의 기본은,
어떻게 쪼갤 수 있는지
를 잘 생각해보자.