728x90
https://www.acmicpc.net/problem/1992
import sys; input = sys.stdin.readline
def divNConq(size, r, c):
global answer
if size == 1:
answer += str(matrix[r][c])
return
if chk_arr(size, r, c, matrix[r][c]):
answer += str(matrix[r][c])
return
half = size // 2
# 좌상
answer += "("
divNConq(half, r, c)
# 우상
divNConq(half, r, c + half)
# 좌하
divNConq(half, r + half, c)
# 우하
divNConq(half, r + half, c + half)
answer += ")"
return
def chk_arr(size, r, c, sel):
for i in range(r, r + size):
for j in range(c, c + size):
if matrix[i][j] != sel:
return False
return True
N = int(input())
matrix = [list(map(int, list(input().rstrip()))) for _ in range(N)]
answer = ''
divNConq(N, 0, 0)
print(answer)
간단한 분할정복 문제이다.
배열의 크기에 맞는 영역의 값들이 하나로만 되어있으면 압축이 되고, 그렇지 않으면 분할하는 방식으로 구현하였다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 2668 숫자고르기 python (0) | 2021.05.20 |
---|---|
[백준] 9466 텀 프로젝트 python (0) | 2021.05.18 |
[백준] 2750 수 정렬하기 C (2) | 2021.05.18 |
[백준] 14500 테트로미노 python (0) | 2021.05.18 |
[백준] 1261 알고스팟 python (0) | 2021.05.18 |