https://www.acmicpc.net/problem/1992
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋ง์ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
2 ์ด | 128 MB | 10660 | 6114 | 4794 | 57.420% |
๋ฌธ์
ํ๋ฐฑ ์์์ ์์ถํ์ฌ ํํํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ฟผ๋ ํธ๋ฆฌ(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์ ์ซ์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์์์ ๊ฐ ์ ๋ค์ ๋ํ๋ธ๋ค.
์ถ๋ ฅ
์์์ ์์ถํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
๋์ ๋ต
size = int(input())
input_arr = list()
for i in range(0,size):
input_arr.append(list(map(int,input())))
def arrPosition(arr,type):
#์ผ์, ์ค์, ์ผ์, ์ค์ ์์ผ๋ก 1234
# ์ํ๋ ๋ถ๋ถ์ arr return
tmp_arr = list()
if type==1:
for i in range(0,len(arr)//2):
tmp=list()
for j in range(0,len(arr)//2):
tmp.append(arr[i][j])
tmp_arr.append(tmp)
elif type==3:
for i in range(len(arr)//2,len(arr)):
tmp=list()
for j in range(0,len(arr)//2):
tmp.append(arr[i][j])
tmp_arr.append(tmp)
elif type==2:
for i in range(0,len(arr)//2):
tmp=list()
for j in range(len(arr)//2,len(arr)):
tmp.append(arr[i][j])
tmp_arr.append(tmp)
else:
for i in range(len(arr)//2,len(arr)):
tmp=list()
for j in range(len(arr)//2,len(arr)):
tmp.append(arr[i][j])
tmp_arr.append(tmp)
if len(tmp_arr)==1:
tmp_arr=tmp_arr[0][0]
return tmp_arr
def imgCompress(arr,size): # ์ด๋ฏธ์ง ์์ถ
result_str = str()
if size==1: # ๊ธฐ์ ์ฌ๋ก
return arr
tmp = 1
first = arr[0][0]
for i in range(0,size):
for j in range(0,size):
if first!=arr[i][j]:
tmp = 0
break
if not(tmp):
break
if tmp: # ๋ชจ๋ ํฝ์
์ ์์ด ๊ฐ์ผ๋ฉด
return first
else: # ๋ค๋ฅด๋ฉด
result_str += '('
for i in range(0,4):
result_str +=str(imgCompress(arrPosition(arr,i+1),size//2))
result_str += ')'
return result_str
print(imgCompress(input_arr,size))
์๊ณ ๋ฆฌ์ฆ
๊ทธ๋ฅ ์ฌ๊ทํจ์ ์จ์ ์์ ํ์์ผ๋ก ๊ตฌํ
์๊ฐ ๋ณต์ก๋
์์ด ๊ฐ์ ์ง ํ์ธํ ๋ ์ต๋ ์ ์ฒดํ์ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด N^2๊ฐ ๋งํผ์ ํ์ํ๋ค. ์ด๋ฐ ํ์์ด ์ฌ๋ฌ ๋ฒ ์์ง๋ง ๋ค ๊ณฑํด์ง๋ ์์์ด๋ฏ๋ก O(N^2)์ด ์๊ฐ ๋ณต์ก๋์ด๋ค.
์๊ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ
๋ฐฑ์ค ์ฑ์ ์์คํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ 29284KB, ์๊ฐ์ 72ms ๋์๋ค.
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python]๋ฐฑ์ค 1780๋ฒ : ์ข ์ด์ ๊ฐ์ (0) | 2020.03.06 |
---|---|
[python]๋ฐฑ์ค 5620๋ฒ : ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ์ ์ ๊ฑฐ๋ฆฌ (0) | 2020.03.01 |
[python]๋ฐฑ์ค 1074๋ฒ : Z (0) | 2020.02.21 |
[python]๋ฐฑ์ค 1019๋ฒ : ์ฑ ํ์ด์ง (0) | 2020.02.21 |
[python]๋ฐฑ์ค 4811๋ฒ : ์์ฝ (1) | 2020.02.21 |
Comment