[BOJ][๐ก3][๋ฐฑ์ค#20058] ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด์คํฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold III
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ง๋ฒ์ฌ ์์ด๋ย ํ์ด์ด๋ณผ๊ณผ ํ ๋ค์ด๋๋ฅผ ์กฐํฉํดย ํ์ด์ด์คํฐ์ ์์ ํ ์ ์๋ค. ์ค๋์ ํ์ด์ด์คํฐ์ ํฌ๊ธฐ๊ฐ 2Nย ร 2N์ธ ๊ฒฉ์๋ก ๋๋์ด์ง ์ผ์ํ์์ ์ฐ์ตํ๋ ค๊ณ ํ๋ค.ย ์์น (r,ย c)๋ ๊ฒฉ์์ rํ c์ด์ ์๋ฏธํ๊ณ , A[r][c]๋ (r, c)์ ์๋ ์ผ์์ ์์ ์๋ฏธํ๋ค. A[r][c]๊ฐ 0์ธ ๊ฒฝ์ฐ ์ผ์์ด ์๋ ๊ฒ์ด๋ค. ํ์ด์ด์คํฐ์ ์์ ํ๋ ค๋ฉด ์์ ํ ๋๋ง๋ค ๋จ๊ณ L์ ๊ฒฐ์ ํด์ผ ํ๋ค. ํ์ด์ด์คํฐ์ย ๋จผ์ ๊ฒฉ์๋ฅผ 2Lย ร 2Lย ํฌ๊ธฐ์ ๋ถ๋ถ ๊ฒฉ์๋ก ๋๋๋ค. ๊ทธ ํ, ๋ชจ๋ ๋ถ๋ถ ๊ฒฉ์๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ์ํจ๋ค. ์ดํ ์ผ์์ด ์๋ ์นธ 3๊ฐ ๋๋ ๊ทธ ์ด์๊ณผ ์ธ์ ํด์์ง ์์ย ์นธ์ย ์ผ์์ย ์์ด 1 ์ค์ด๋ ๋ค. (r, c)์ ์ธ์ ํ ์นธ์ (r-1, c), (r+1, c), (r, c-1), (r, c+1)์ด๋ค. ์๋ ๊ทธ๋ฆผ์ ์นธ์ ์ ํ ์ ์๋ ์นธ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ ์ ์ ์์ด๋ค.
๋ง๋ฒ์ ์์ ํ๊ธฐ ์ L = 1 L = 2
๋ง๋ฒ์ฌ ์์ด๋ ํ์ด์ด์คํฐ์ ์ด Q๋ฒ ์์ ํ๋ ค๊ณ ํ๋ค. ๋ชจ๋ ํ์ด์ด์คํฐ์ ์์ ํ ํ, ๋ค์ 2๊ฐ์ง๋ฅผ ๊ตฌํด๋ณด์.
๋จ์์๋ ์ผ์ A[r][c]์ ํฉ ๋จ์์๋ ์ผ์ ์ค ๊ฐ์ฅ ํฐ ๋ฉ์ด๋ฆฌ๊ฐ ์ฐจ์งํ๋ ์นธ์ ๊ฐ์
์ผ์์ด ์๋ ์นธ์ดย ์ผ์์ด ์๋ ์นธ๊ณผ ์ธ์ ํด ์์ผ๋ฉด, ๋ ์นธ์ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ํ๋ค. ๋ฉ์ด๋ฆฌ๋ ์ฐ๊ฒฐ๋ ์นธ์ ์งํฉ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N๊ณผ Q๊ฐย ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ 2N๊ฐ์ ์ค์๋ ๊ฒฉ์์ ๊ฐ ์นธ์ ์๋ ์ผ์์ ์์ด ์ฃผ์ด์ง๋ค. r๋ฒ์งธ ์ค์์ c๋ฒ์งธ ์ฃผ์ด์ง๋ ์ ์๋ย A[r][c] ์ด๋ค. ๋ง์ง๋ง ์ค์๋ ๋ง๋ฒ์ฌ ์์ด๊ฐ ์์ ํ ๋จ๊ณ L1, L2, โฆ, LQ๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋จ์์๋ ์ผ์ A[r][c]์ ํฉ์ ์ถ๋ ฅํ๊ณ , ๋์งธ ์ค์ ๊ฐ์ฅ ํฐ ๋ฉ์ด๋ฆฌ๊ฐ ์ฐจ์งํ๋ ์นธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.ย ๋จ, ๋ฉ์ด๋ฆฌ๊ฐ ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
์ ํ
2 โค N โค 6 1 โค Q โค 1,000 0 โค A[r][c] โค 100 0 โค Li โค N
์์
์์ 1
์ ๋ ฅ
3 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1
์ถ๋ ฅ
284
64
์์ 2
์ ๋ ฅ
3 2
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2
์ถ๋ ฅ
280
64
์์ 3
์ ๋ ฅ
3 5
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 0 3 2
์ถ๋ ฅ
268
64
์์ 4
์ ๋ ฅ
3 10
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 0 3 2 1 2 3 2 3
์ถ๋ ฅ
248
62
์์ 5
์ ๋ ฅ
3 10
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 1 2 3 1 2 3 1
์ถ๋ ฅ
246
60
์์ 6
์ ๋ ฅ
3 10
1 0 3 4 5 6 7 0
8 0 6 5 4 3 2 1
1 2 0 4 5 6 7 0
8 7 6 5 4 3 2 1
1 2 3 4 0 6 7 0
8 7 0 5 4 3 2 1
1 2 3 4 5 6 7 0
0 7 0 5 4 3 2 1
1 2 3 1 2 3 1 2 3 1
์ถ๋ ฅ
37
9
My Sol
import sys
input = sys.stdin.readline
def main():
def rotate():
for i in range(0, TL, SL):
for j in range(0, TL, SL):
rotate_square(i, j)
def rotate_square(si, sj):
square_new = [[0]*SL for _ in range(SL)]
for i in range(SL):
for j in range(SL):
square_new[i][j] = mat[si+SL-1-j][sj+i]
for i in range(SL):
for j in range(SL):
mat[si+i][sj+j] = square_new[i][j]
def remove_ice():
del_arr = []
for i in range(TL):
for j in range(TL):
if not mat[i][j]: continue
ice_cnt = 0
for di, dj in ((-1,0),(1,0),(0,1),(0,-1)):
si, sj = i+di, j+dj
if not (0<=si<TL and 0<=sj<TL): continue
if not mat[si][sj]: continue
ice_cnt += 1
if ice_cnt < 3:
del_arr.append((i, j))
for ki, kj in del_arr:
mat[ki][kj] -= 1
# ์ ์ฒด ์ผ์ ์ ๊ณ์ฐ
def calc_sum_ice():
sum_ice = 0
for i in range(TL):
for j in range(TL):
sum_ice += mat[i][j]
return sum_ice
# ์ต๋ ์ผ์ ํฌ๊ธฐ ๊ณ์ฐ
def calc_max_ice():
def calc_ice(i, j):
Q = set()
Q.add((i, j))
cur_ice = 0
while Q:
i, j = Q.pop()
if not (0<=i<TL and 0<=j<TL): continue
if visit[i][j] or not mat[i][j]: continue
visit[i][j] = 1
cur_ice += 1
for di, dj in ((-1,0),(1,0),(0,1),(0,-1)):
Q.add((i+di, j+dj))
return cur_ice
visit = [[0]*TL for _ in range(TL)]
max_ice = 0
for i in range(TL):
for j in range(TL):
if not mat[i][j]: continue
cur_ice = calc_ice(i, j)
if max_ice < cur_ice:
max_ice = cur_ice
return max_ice
N, Q = map(int, input().split())
TL = 2**N
mat = [list(map(int, input().split())) for _ in range(TL)]
qs = list(map(int, input().split()))
for q in qs:
SL = 2**q
if q: rotate()
remove_ice()
print(calc_sum_ice())
print(calc_max_ice())
main()
๋จ์ ๊ตฌํ๋ฌธ์ ์๋ค. 6๋ฌ ์ ์ ํด๊ฒฐ์ ์คํจํ๋๋ฐ, ๋ค์ ๋ณด๋ input์ ํฌ๊ธฐ๊ฐ ์ต๋ 1000x1000์ผ๋ก ํฌ๊ธฐ๊ฐ ์ปค์ sys.stdin.readline์ ์ ๋ ฅ ์ฒ๋ฆฌ๋ง ํด์ฃผ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
- ์์์ ํ๋ฏ, ์
๋ ฅ ํฌ๊ธฐ๊ฐ ํฌ๋ฏ๋ก readline์ ์ฌ์ฉํด ์
๋ ฅ์ ์ฒ๋ฆฌํ๋ค. 2์ N์ ๊ณฑ๋งํผ ์ ์ฒด 2์ฐจ์ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ฏ๋ก ๊ทธ ์ ์ฒด ๊ธธ์ด๋ฅผ
TL
๋ก, 2์ฐจ์ ๋ฐฐ์ด์mat
์ผ๋ก ๋ช ๋ช ํด ์ฒ๋ฆฌํ๋ค. ๊ฐ q๋ค์ ๋ฆฌ์คํธ๋ฅผqs
๋ก ๋ช ๋ช ํด ๋ฆฌ์คํธ๋ก ๋ฐ์๋ค. - q๋ 2์ q์ ๊ณฑ์ ๋จ์๋ก 90๋ ์๊ณ๋ฐฉํฅ ํ์ ํ๋ฏ๋ก ์ด ๊ฐ q๋ง๋ค ๋ชจ๋ ๋ฃจํด์ ์งํํ๋ฉด ๋๊ฒ ๋ค. ์ด๋ 2์ q์ ๊ณฑ์
SL
๋ก ๋ช ๋ช ํ๋ค. - q๊ฐ 0์ด๋ฉด ํ์ ๋จ์๋ 1์ด๋ฏ๋ก ํ์ ์ ํ๊ฐ ๊ฐ๋ค. ๋๋ฌธ์ q๊ฐ 1 ์ด์์ผ ๋๋ง ํ์ ์ํค๋
rotate
ํจ์๋ฅผ ์คํํ๋ค. rotate
ํจ์๋mat
์ ๊ฐSL
๋จ์ ๊ฒฉ์๋ง๋คrotate_square
ํจ์๋ฅผ ์คํํ๋ค. ์ด ํจ์๋ ์์์ ์ ๊ธฐ์ค์ผ๋ก ๊ธฐ์กดmat
์ ํด๋น ๊ฒฉ์๋ฅผ 90๋ ํ์ ์์ผmat
์ ๋ค์ ์ ์ฉ์์ผ์ค๋ค.- ์ด๋ ๊ฒ ๋ชจ๋ ๋จ์๊ฒฉ์๋ง๋ค
rotate_square
์ ์คํํ๋rotate
ํจ์๋ฅผ ๋ชจ๋ ๋ง์น๋ฉด, ์ฃผ๋ณ์ ์ผ์์ ํ์ธํด ๋ น์ฌ์ฃผ๋ ํจ์๋ฅผ ์คํํ๋ค. ์ด ํจ์๋ฅผremove_ice
๋ผ๊ณ ๋ช ๋ช ํ๋ค. remove_ice
ํจ์์์ ๋ชจ๋mat
์ ์ผ์์ด ์๋ ํฌ์ธํธ์ ์ํ์ข์ฐ๋ฅผ ํ์ธํด ๊ฐ์ด ์๋ ์ํ์ข์ฐ ํฌ์ธํธ๊ฐ 3์ดํ์ด๋ฉด ์ผ์์ ๋ น์ฌ์ฃผ๋del_arr
์ ์ถ๊ฐํ๋ค. ์ด๋ ๋ฐ๋ก ํด๋น ํฌ์ธํธ์ ๊ฐ์ ๊น์ง ์๋ ์ด์ ๋ ํด๋น ํฌ์ธํธ๊ฐ 1์์ 0์ผ๋ก, ์์ ํ ๋ฌผ์ด ๋์์ ๋ ๋ค๋ฅธ ๊ฒฉ์์ ์ฃผ๋ณ ์ฒดํฌ์ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ฌธ์ ํ ์์ ์ ์์ ํ ๊ณ ์ ํ๊ณ , ํ ์์ ์์ ์ผ์์ ๋ น์ฌ์ฃผ๋ ๋ฆฌ์คํธ๋ฅผ ๋ชจ๋ ๋ชจ์ ๋ค, ํ ๋ฒ์ 1์ฉ ๊น์์ฃผ๊ฒ ๋๋ค.- ์์ 2๋ถํฐ 6์ ๋ฃจํด์ ๋ชจ๋ q์ ๋ํ์ฌ ์งํํด์ฃผ๋ฉด, ๋จ์
mat
์ผ๋ก๋ถํฐ ์ ์ฒด ์ผ์ ์๊ณผ ์ต๋ ์ผ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํด์ฃผ๋ฉด ๋๊ฒ ๋ค. ์ด๋ฅผ ๊ฐ๊ฐcalc_sum_ice
,calc_max_ice
ํจ์๋ก ๊ตฌํํ๋ค. calc_sum_ice
๋mat
์ ๋ชจ๋ ๋จ์์ํํ๋ฉฐ ๊ฐ์ ๋ํด ๋ฐํํ๋ ํจ์์ด๋ค.calc_max_ice
๋ ๋ฐฉ๋ฌธํ์ง ์์ ์ผ์ ์นธ์ ๋๋ฌํ๋ฉด ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ผ์๋ค์ ํ์ธํ๋ฉฐ ์ ์ฒด ์ผ์๋ฉ์ด๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ๋ณด๋calc_ice
BFSํจ์๋ฅผ ๋งค๋ฒ ์คํํ๋ ํจ์์ด๋ค. ์ด๋calc_ice
ํจ์๋ก ๊ฐ ๋ฉ์ด๋ฆฌ๋ค์ ํฌ๊ธฐ๋ฅผ ํ์ ํ๋ฉด, ์ด ๊ฐ๋ค์ ๋์ ์ต๋๊ฐ๊ณผ ๋์กฐํ์ฌ ์ ์ฒด ์ผ์๋ฉ์ด๋ฆฌ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ํ์ ํ ์ ์๊ฒ ๋๋ค. ์ด๋ฅผ ์ฐพ์ ๋ฐํํ๋ค.- ์ด๋ฅผ ์ถ๋ ฅํด์ค๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ