๐ก ์กฐ๊ฑด
- ์ฃผ์ด์ง ์์์ด ๋ชจ๋ 0์ผ๋ก๋ง ๋์ด ์์ผ๋ฉด ์์ถ ๊ฒฐ๊ณผ๋ "0"์ด ๋๊ณ , ๋ชจ๋ 1๋ก๋ง ๋์ด ์์ผ๋ฉด ์์ถ ๊ฒฐ๊ณผ๋ "1"์ด ๋๋ค.
- ๋ง์ฝ 0๊ณผ 1์ด ์์ฌ ์์ผ๋ฉด ์ ์ฒด๋ฅผ ํ ๋ฒ์ ๋ํ๋ด์ง๋ฅผ ๋ชปํ๋ค.
์ผ์ชฝ ์, ์ค๋ฅธ์ชฝ ์, ์ผ์ชฝ ์๋, ์ค๋ฅธ์ชฝ ์๋, ์ด๋ ๊ฒ 4๊ฐ์ ์์์ผ๋ก ๋๋์ด ์์ถํ๊ฒ ๋๋ค.
์ด 4๊ฐ์ ์์ญ์ ์์ถํ ๊ฒฐ๊ณผ๋ฅผ ์ฐจ๋ก๋๋ก ๊ดํธ ์์ ๋ฌถ์ด์ ํํ.
- N ์ ์ธ์ ๋ 2์ ์ ๊ณฑ์๋ก ์ฃผ์ด์ง๋ฉฐ, 1 ≤ N ≤ 64์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ค.
- N ×N ํฌ๊ธฐ์ ์์์ด ์ฃผ์ด์ง ๋, ์ด ์์์ ์์ถํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๋ฌธ์ .
- ๋ถํ ์ ๋ณต, ์ฌ๊ท ์ ํ์ ๋ฌธ์ .
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์ 1
8
11110000
11110000
00011100
00011100
11110000
11110000
11110011
11110011
์คํ๊ฒฐ๊ณผ 1
((110(0101))(0010)1(0001))
โจ๏ธ ๋ฌธ์ ํ์ด
- ๋ถํ ์ ๋ณต์ ๊ฐ๋
์ผ๋ก ํด๊ฒฐ์ ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
- n ์ 2์ฉ ๋๋์ด ์ฌ๊ท๋ฅผ ํตํด ํฐ ๋จ์์์ ์์ ๋จ์๋ก ๊ฐ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ค.
- check() ํจ์๋ก ๊ฐ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก mode ๋งํผ ๋จ์ด์ง ์ขํ๊น์ง ์ซ์๊ฐ ๊ฐ์์ง ํ์ํ๋ค.
๋ง์ฝ ๊ฐ์ง ์๋ค๋ฉด, ๊ดํธ๋ฅผ ๋ฃ๊ณ ์ฌ๊ทํ๋ค.
- ๊ฐ๋ค๋ฉด 1ํน์ 0์ ๋ฃ์ด์ค๋ค.
- ์ขํ๋ ๋ค ๋ฐฉํฅ์ด๋ค. ์ฌ๊ท๋ฅผ ํ ๋๋ง๋ค mode๋ ๋ ๋ฐฐ์ฉ ์ค์ด๋ ๋ค.
๐ฅ ์์ค ์ฝ๋
from sys import stdin, setrecursionlimit
setrecursionlimit(10 ** 6)
n = int(stdin.readline())
arr, ans = [], ''
for i in range(n):
arr.append(list(map(int, list(stdin.readline().rstrip()))))
def check(x, y, mode):
for i in range(x, x + mode):
for j in range(y, y + mode):
if arr[x][y] != arr[i][j]:
return False
return True
def solve(x, y, mode):
global ans
if check(x, y, mode):
if arr[x][y] == 1:
ans += '1'
else:
ans += '0'
else:
ans += '('
solve(x, y, mode // 2)
solve(x, y + mode // 2, mode // 2)
solve(x + mode // 2, y, mode // 2)
solve(x + mode // 2, y + mode // 2, mode // 2)
ans += ')'
solve(0, 0, n)
print(ans)