import sys
from collections import deque
import copy
row, col = map(int, input().split())
_map = [list(map(int, sys.stdin.readline().split())) for _ in range(row)]
queue = deque([])
checked = [[False]*col for _ in range(row)]
dr = [1, -1, 0, 0]
dc = [0, 0, 1, -1]
def bfs():
copiedCheck = copy.deepcopy(checked)
queue.append([0, 0])
while queue:
r, c = queue.popleft()
for i in range(4):
nr = r + dr[i]
nc = c + dc[i]
if 0 <= nr < row and 0 <= nc < col:
if _map[nr][nc] == 0 and not copiedCheck[nr][nc]:
queue.append([nr, nc])
copiedCheck[nr][nc]=True
elif _map[nr][nc]>0 :
_map[nr][nc]+=1
time = 0
while True:
bfs()
isRemoved = False
for r in range(row):
for c in range(col):
if _map[r][c]>=3:
isRemoved = True
_map[r][c]=0
elif 0<_map[r][c]<=2:
_map[r][c]=1
if isRemoved:
time+=1
else:
break
print(time)
๋ฌธ์ ์ ๊ทผ ๋ฐฉ๋ฒ
1. ์น์ฆ๊ฐ ๋์ธ ๋ชจ๋์ข ์ด ๊ฐ์ฅ์๋ฆฌ๋ ๋ฌด์กฐ๊ฑด ๋ค 0 ์ด๊ณ ์ฐ๊ฒฐ๋์ด ์๋ค. ์ธ๋ถ๊ณต๊ธฐ๋ผ๋ฉด (0,0)์์ bfs()๋ฅผ ์คํํ์๋, ์์ธ์์ด ์ฒดํน์ด ๋ ๊ฒ์ด๋ค.
2. ํ์ ์ค์ ๊ณต๊ธฐ(0)๊ฐ ์๋ ์น์ฆ(1)์ ๋ง๋๋ ๊ฒฝ์ฐ ์น์ฆ์ ๊ฐ์ 1์ฉ ์ฌ๋ฆฐ๋ค.
3. ๊ณต๊ธฐ์ ์ํด์ 2๋ฒ ์ด์ ์น์ฆ์ ๊ฐ์ด ์ฌ๋ผ๊ฐ๋ค๋ฉด ์ธ๋ถ ๊ณต๊ธฐ์ 2๋ฉด์ด ๋ฟ์์๋ค๋ ๋ป์ด๋ค.
4. bfs()๊ฐ ๋๋๊ณ ๋งต ์ ์ฒด๋ฅผ ํ์ํ๋ฉด์ ์น์ฆ ๊ฐ์ด 3์ด์(์๋ ๊ฐ์ด 1์ธ๋ฐ 2๋ฒ ์ด์ ํฐ์น๊ฐ ๋๋ฉด 3์ด์์ผ ๊ฒ)์ด๋ผ๋ฉด 0์ผ๋ก ์ ๊ฑฐํ๋ค. ์น์ฆ ๊ฐ์ด 2 ์ดํ๋ผ๋ฉด ๋ค์ 1๋ก ๋ง๋ค์ด์ค๋ค.
5. ์ ๊ฑฐ๋ ๊ฒฝ์ฐ time์ +1์ ํ๊ณ , ์ ๊ฑฐ๋ ์น์ฆ๊ฐ ์์ ์๋ค๋ฉด while๋ฌธ์ ํ์ถํ๋ค.