1. 쿼드압축 후 개수 세기
1.1. 컴퓨팅적 사고
- 가장왼쪽위의 좌표를 기준으로 현재 탐색하고자 하는 정사각형의 한변의 길이를 통해서 탐색합니다. 가장 왼쪽지점을 기준으로 처리합니다. 분할 후도 같게 생각합니다.
- 3가지 경우의수: 특정 범위가 모두 '0’인 경우, 특정 범위가 모두 ‘1’ 인경우, 그게 아닌경우를 찾아냅니다.
이것들을 DFS로 처리하여 (x,y),(x+size,y), (x,y+size),(x+size,y+size) 총 네가지경우로 나누어서 생각을 합니다. - 값을 절반씩 나누어가면서 처리하면서 진행합니다.
1 0 0 0
0 1 0 0
1 1 1 0
1 1 0 0
테스트케이스로 다음과 같이 주어졌다고 가정하겠습니다.
1번 사각형 왼쪽 상단: (x , y) , SIZE / 2
2번 사각형 오른쪽 상단: (x , y + SIZE / 2) , SIZE / 2
3번 사각형 왼쪽 하단: (x + K / 2 , y) , SIZE / 2
4번 사각형 오른쪽 하단: (x + K / 2 , y + SIZE / 2) , SIZE / 2
의 경우로 나타낼 수 있습니다.
1.2. 소스코드
1 | // 가장왼쪽위의 좌표를 기준으로 현재 탐색하고자 하는 정사각형의 한변의 길이를 통해서 탐색 |