Algorithm/Data Structure
(Python) - BOJ(1992번) : 쿼드 트리
하눤석
2022. 1. 30. 20:55
728x90
https://www.acmicpc.net/problem/1992
- 해설 :
위 그림에서 왼쪽의 영상은 오른쪽의 배열과 같이 숫자로 주어지며, 이 영상을 쿼드 트리 구조를 이용하여 압축하면 "(0(0011)(0(0111)01)1)"로 표현된다. N ×N 크기의 영상이 주어질 때, 이 영상을 압축한 결과를 출력하는 문제이다.
- 풀이 :
재귀를 이용하여 가로, 세로를 2씩나눈 4가지 경우르 분할하여 각 케이스에 대해 압축할 수 있는지 여부를 확인하는 문제이다.
- 소스코드 :
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
|
import sys
input = sys.stdin.readline
def ans(x,y,n):
check = board[x][y]
for i in range(x,n+x):
for j in range(y,n+y):
if check != board[i][j]:
a = ans(x,y,n//2)
b = ans(x,y+n//2,n//2)
c = ans(x+n//2,y,n//2)
d = ans(x+n//2,y+n//2,n//2)
return '('+a+b+c+d+')'
if check == 0:
return '0'
else:
return '1'
if __name__ == "__main__":
N = int(input())
board = [list(map(int,input().strip())) for _ in range(N)]
print(ans(0,0,N))
|
cs |
320x100