
https://www.acmicpc.net/problem/1992
๋ฌธ์
ํ๋ฐฑ ์์์ ์์ถํ์ฌ ํํํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ฟผ๋ ํธ๋ฆฌ(Quad Tree)๋ผ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํฐ ์ ์ ๋ํ๋ด๋ 0๊ณผ ๊ฒ์ ์ ์ ๋ํ๋ด๋ 1๋ก๋ง ์ด๋ฃจ์ด์ง ์์(2์ฐจ์ ๋ฐฐ์ด)์์ ๊ฐ์ ์ซ์์ ์ ๋ค์ด ํ ๊ณณ์ ๋ง์ด ๋ชฐ๋ ค์์ผ๋ฉด, ์ฟผ๋ ํธ๋ฆฌ์์๋ ์ด๋ฅผ ์์ถํ์ฌ ๊ฐ๋จํ ํํํ ์ ์๋ค.
์ฃผ์ด์ง ์์์ด ๋ชจ๋ 0์ผ๋ก๋ง ๋์ด ์์ผ๋ฉด ์์ถ ๊ฒฐ๊ณผ๋ "0"์ด ๋๊ณ , ๋ชจ๋ 1๋ก๋ง ๋์ด ์์ผ๋ฉด ์์ถ ๊ฒฐ๊ณผ๋ "1"์ด ๋๋ค. ๋ง์ฝ 0๊ณผ 1์ด ์์ฌ ์์ผ๋ฉด ์ ์ฒด๋ฅผ ํ ๋ฒ์ ๋ํ๋ด์ง๋ฅผ ๋ชปํ๊ณ , ์ผ์ชฝ ์, ์ค๋ฅธ์ชฝ ์, ์ผ์ชฝ ์๋, ์ค๋ฅธ์ชฝ ์๋, ์ด๋ ๊ฒ 4๊ฐ์ ์์์ผ๋ก ๋๋์ด ์์ถํ๊ฒ ๋๋ฉฐ, ์ด 4๊ฐ์ ์์ญ์ ์์ถํ ๊ฒฐ๊ณผ๋ฅผ ์ฐจ๋ก๋๋ก ๊ดํธ ์์ ๋ฌถ์ด์ ํํํ๋ค

์ ๊ทธ๋ฆผ์์ ์ผ์ชฝ์ ์์์ ์ค๋ฅธ์ชฝ์ ๋ฐฐ์ด๊ณผ ๊ฐ์ด ์ซ์๋ก ์ฃผ์ด์ง๋ฉฐ, ์ด ์์์ ์ฟผ๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ์์ถํ๋ฉด "(0(0011)(0(0111)01)1)"๋ก ํํ๋๋ค. N รN ํฌ๊ธฐ์ ์์์ด ์ฃผ์ด์ง ๋, ์ด ์์์ ์์ถํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ์ซ์ N ์ด ์ฃผ์ด์ง๋ค. N ์ ์ธ์ ๋ 2์ ์ ๊ณฑ์๋ก ์ฃผ์ด์ง๋ฉฐ, 1 โค N โค 64์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ๋ ๊ธธ์ด N์ ๋ฌธ์์ด์ด N๊ฐ ๋ค์ด์จ๋ค. ๊ฐ ๋ฌธ์์ด์ 0 ๋๋ 1์ ์ซ์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์์์ ๊ฐ ์ ๋ค์ ๋ํ๋ธ๋ค.
์ถ๋ ฅ
์์์ ์์ถํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
์กฐ๊ฑด
์๊ฐ ์ ํ 2์ด
๋ฉ๋ชจ๋ฆฌ ์ ํ 128MB
์ ๊ทผ
์ฝ๋
import sys
input = sys.stdin.readline
def quadTree(x,y,n):
global result
first = video[x][y] # ์ด๊ธฐ ์ซ์
for i in range(x,x+n):
for j in range(y,y+n):
# 4๋ฑ๋ถ ํด์ผํ๋ ๊ฒฝ์ฐ
if first != video[i][j]:
result += '('
quadTree(x, y, n//2) # 1์ฌ๋ถ๋ฉด
quadTree(x, y+n//2, n//2) # 2์ฌ๋ถ๋ฉด
quadTree(x+n//2, y, n//2) # 3์ฌ๋ถ๋ฉด
quadTree(x+n//2, y+n//2, n//2) # 4์ฌ๋ถ๋ฉด
result += ')'
return
# ๋์ผํ ์ซ์๋ง ๋์จ ๊ฒฝ์ฐ
if first == '0':
result += '0'
elif first == '1':
result += '1'
if __name__ == '__main__':
n = int(input())
video = [list(input().rstrip()) for _ in range(n)]
result = ''
quadTree(0,0,n)
print(result)

์ฒ์์ ๋์จ ๊ทธ๋ฆผ์ ์๋ฅผ ๋ค์ด ์ค๋ช
ํด๋ณด๊ฒ ๋ค.
์ด๊ธฐ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก 1,2,3,4์ฌ๋ถ๋ฉด์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ , ๊ทธ ํ์๋ก๋ 2-1์ฌ๋ถ๋ฉด ... 2-4์ฌ๋ถ๋ฉด ์ด๋ฐ ์์ผ๋ก ์นญํ๊ฒ ๋ค.

ํ์ฌ result = (0

๋ค์์ผ๋ก 2์ฌ๋ถ๋ฉด์ ํ์ํ๋ ์ค 0์ด ์๋ 1์ ๋ฐ๊ฒฌํ์ฌ ๋ค์ 4๋ฑ๋ถ์ผ๋ก ์ชผ๊ฐ๋ฉฐ ๊ดํธ๋ฅผ ์ด์ด์ค๋ค.
ํ์ฌ result = (0(
2-1์ฌ๋ถ๋ฉด 0, 2-2์ฌ๋ถ๋ฉด 0, 2-3์ฌ๋ถ๋ฉด 1, 2-4์ฌ๋ถ๋ฉด 1๋ก ์์ถํ ์ ์๊ธฐ ๋๋ฌธ์ result์ 0011์ ์ถ๊ฐํด์ฃผ๊ณ ๋ชจ๋ ์ฌ๋ถ๋ฉด ํ์์ ๋ง์ณค๊ธฐ์ ๊ดํธ๋ฅผ ๋ซ์์ค๋ค.
ํ์ฌ result = (0(0010)
์ด๋ฐ์์ผ๋ก ๋๊น์ง ํ์์ ํ๋ฉด ์ํ๋ ๋ต์ ์ป์ ์ ์๋ค!๐
๋๋ ์ & ๋ฐฐ์ด ์