/ ALGORITHM

백준 - 치즈(#2638)

백준 2638번

image-20230109235727827image-20230109235708004

from collections import deque
import sys
input = sys.stdin.readline

N,M = map(int,input().split())
maps = [list(map(int,input().split())) for _ in range(N)]

dx = [1,-1,0,0]
dy = [0,0,1,-1]

def bfs(i,j):
    queue = deque([[i,j]])
    while queue:
        x,y = queue.popleft()
        for i in range(4):
            nx = x+dx[i]
            ny = y+dy[i]

            if nx<0 or ny<0 or nx>N-1 or ny>M-1:
                continue

            if maps[nx][ny]==0:
                if not visited[nx][ny]:
                    visited[nx][ny]=True
                    queue.append([nx,ny])
            else:
                maps[nx][ny]+=1

sec = 0
while maps.count([0]*M)!=N:
    visited = [[False]*M for _ in range(N)]
    visited[0][0]=True
    bfs(0,0)

    for i in range(N):
        for j in range(M):
            if maps[i][j]>=3:
                maps[i][j]=0
            elif maps[i][j]==2:
                maps[i][j]=1
    sec+=1

print(sec)