728x90
반응형
🔗 Problem Link
1992번: 쿼드트리
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또
www.acmicpc.net
❔Thinking
- 0과 1로 이루어진 2차원 데이터 구조를 압축한 결과를 반환한다.
- 해당 구조가 모두 0이거나 모두 1이 아닐경우, 사분면으로 나누어 다시 압축을 시도한다.
💻Solution
import sys
input = sys.stdin.readline
N = int(input())
board = []
result = ''
for _ in range(N):
board.append(list(map(int, input().rstrip())))
def check(x,y,size):
global board
flag = board[x][y]
for i in range(x,x+size):
for j in range(y,y+size):
if board[i][j] != flag:
return False
return True
def dfs(x,y,size):
global board
global result
if size == 1 or check(x,y,size) is True: # board가 모두 0 혹은 1인 경우
result += str(board[x][y])
return
result += '('
size //= 2
tmp = []
# 1사분면
dfs(x,y,size)
# 2사분면
dfs(x,y+size,size)
# 3사분면
dfs(x+size,y,size)
# 4사분면
dfs(x+size,y+size,size)
result += ')'
dfs(0,0,N)
print(result)
🗝️keypoint
- board와 반환할 result를 global변수로 정의하여 함수들이 호출되면서 board와 result를 활용할 수 있도록 한다.
- 사분면으로 나누기 때문에, 매번 board의 사이즈를 반으로 줄여가며 확인한다.
'코딩테스트 > Python' 카테고리의 다른 글
[Data Structure] 트리 (0) | 2023.03.30 |
---|---|
GCD(Great Common Divisior), LCM(Least Common Multiple) (1) | 2023.03.24 |
[Baekjoon] 1389. 케빈 베이컨의 6단계 법칙 (0) | 2023.01.30 |
[Programmers] Level 3. 경주로 건설 (0) | 2023.01.20 |
[Baekjoon] 1012. 유기농 배추 (1) | 2023.01.20 |