ํ์ด
์๊ฐ์ด ์ง๋ ๋ ๋ง๋ค ๋น์ฐ์ด ๋ น๊ณ ๋น์ฐ์ด 2 ์กฐ๊ฐ ์ด์ ๋ถ๋ฆฌ๋ ๊ฒฝ์ฐ ๋ช ๋ ์ด ๊ฑธ๋ฆฌ๋์ง ๊ณ์ฐํ๋ ๋ฌธ์ ์ด๋ค.
1๋ ์ด ์ง๋ ๋ ๋ง๋ค ๋น์ฐ์ด ๋ น๋ ๊ธฐ๋ฅ์ โ๋ฏธ์ธ๋จผ์ง ์๋ !โ ๋ฌธ์ .
๋น์ฐ์ ์กฐ๊ฐ์ ์ธ๋ ๊ธฐ๋ฅ์ โ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐโ ๋ฌธ์ .
โ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐโ ๋ฌธ์ ์ โ๋ฏธ์ธ๋จผ์ง ์๋ !โ ๋ฌธ์ ๋ฅผ ํฉ์ณ๋์ ๋ฌธ์ ๊ฐ๋ค.
while๋ฌธ์ ํ์ฉํด ๋ชจ๋ ๋น์ฐ์ด ๋ น๊ฑฐ๋ ๋น์ฐ์ด 2 ์กฐ๊ฐ ์ด์์ผ๋ก ๋ถ๋ฆฌ๋ ๋ ๊น์ง ์ ๊ธฐ๋ฅ์ ๋ฐ๋ณต์ํจ๋ค.
visited ์ new 2 ์ฐจ์ ๋ฐฐ์ด์ ์ด๊ธฐํ ํด์ฃผ๋ฉด์ 1๋ ํ ๋น์ฐ์ด ๋ น์์ ๋ ์ ๋ณด๋ฅผ new ์ ์ ์ฅํด์ฃผ๊ณ ,
์ด new ๋ฅผ bfs ์ ์ง์ด๋ฃ์ด visited ๋ฅผ ํตํด ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.
bfs ๊ฐ ํ ๋ฒ ์คํ๋ ๋ ๋ง๋ค ๋น์ฐ ํ ์กฐ๊ฐ์ด ์๋ค๋ ์๊ธฐ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ง์ถฐ์ piece ๋ณ์๋ฅผ ์์ ํด์ฃผ๊ณ ,
2 ์กฐ๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ข ๋ฃ, ์๋ ๊ฒฝ์ฐ ๋ฐ๋ณตํ๋ฉด๋๋ค.
์์ค์ฝ๋
# ๋น์ฐ
from collections import deque
import sys
input = sys.stdin.readline
def bfs(i, j):
q = deque()
q.append([i, j])
visited[i][j] = 1
while q:
x, y = q.popleft()
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < n and 0 <= ny < m: # ๋ฒ์ ๋ด์ผ ๋
if new[nx][ny] != 0 and visited[nx][ny] == 0: # ๋น์ฐ์ด ์ด์ด์ ธ ์์ผ๋ฉฐ ๋ฐฉ๋ฌธํ์ง ์์์ ๊ฒฝ์ฐ
q.append([nx, ny])
visited[nx][ny] = 1 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
return
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
n, m = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
years = 1
while True:
# ๋น์ฐ์ด ๋ค ๋
น์ ๋ ๊น์ง ๋ถ๋ฆฌ๋์ง ์์ ๊ฒฝ์ฐ
zero = 0
for g in graph:
zero += sum(g)
if zero == 0:
print(0)
break
# ์ด๊ธฐํ
visited = [[0] * m for _ in range(n)]
new = [[0] * m for _ in range(n)]
piece = 0
# ์ง๊ตฌ ์จ๋ํ
for i in range(n):
for j in range(m):
if graph[i][j] != 0:
temp = graph[i][j]
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if 0 <= nx < n and 0 <= ny < m and graph[nx][ny] == 0:
temp -= 1
if temp > 0:
new[i][j] = temp
# ๋น์ฐ์ด ๋ช ์กฐ๊ฐ์ธ์ง ํ์ธ
for i in range(n):
for j in range(m):
if new[i][j] != 0 and visited[i][j] == 0:
bfs(i, j)
piece += 1
# ๋น์ฐ์ด ๋ถ๋ฆฌ๋ ๊ฒฝ์ฐ
if piece > 1:
print(years)
break
# 1๋
ํ ๋น์ฐ์ ๋ณด ์
๋ฐ์ดํธ
years += 1
graph = new