https://www.acmicpc.net/problem/1992
Solution
4사분면으로 나누는 쿼드트리, 분할 정복 문제이다. https://www.acmicpc.net/problem/2630문제와 완전히 같은 유형이라고 보면된다.
Python Code
#쿼드 트리 함수 정의
def quad_tree(x, y, n):
global matrix, answer #배열 정보와 답이 될 변수를 끌어옴
color = matrix[y][x] #첫 색깔(흑백)과 나머지 색이 같아야함
double_break = False #for문 탈출용 double_break
for i in range(x, x+n):
if double_break:
break
for j in range(y, y+n):
if matrix[j][i] != color: #하나라도 틀릴시에 재귀문 생성
answer += '(' #문 열고
quad_tree(x, y, n//2) #2사분면
quad_tree(x + n//2, y, n//2) #1사분면
quad_tree(x, y + n//2, n//2) #3사분면
quad_tree(x + n//2, y + n//2, n//2) #4사분면
answer += ')' #문 닫고
double_break = True #탈출!
break
if not double_break:
if matrix[y][x] == 1: #검정색이라면
answer += '1'
else:
answer += '0' #흰색이라면
N = int(input())
matrix = []
answer = ''
for _ in range(N):
matrix.append(list(map(int, str(input()))))
quad_tree(0,0,N)
print(answer)
'Programming [Python] > 백준 알고리즘 솔루션' 카테고리의 다른 글
#220 백준 파이썬 [11049] 행렬 곱셈 순서 (1) | 2019.11.27 |
---|---|
#219 백준 파이썬 [1780] 종이의 개수 - 분할정복 (0) | 2019.11.22 |
#217 백준 파이썬 [2630] 색종이 만들기 - 분할 정복 (0) | 2019.11.22 |
#216 백준 파이썬 [10816] 숫자 카드 2 (0) | 2019.11.21 |
#215 백준 파이썬 [1620] 나는야 포켓몬 마스터 이다솜 (0) | 2019.11.21 |