https://www.acmicpc.net/problem/2573
0 출력from sys import stdin
from collections import deque, defaultdict
N, M = map(int, stdin.readline().split())
mat = [list(map(int, stdin.readline().split())) for _ in range(N)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(x, y):
q = deque([(x, y)])
info = defaultdict(int)
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < M:
if not mat[nx][ny]:
info[(x, y)] += 1
elif not visited[nx][ny]:
q.append((nx, ny))
visited[nx][ny] = 1
for x, y in info:
mat[x][y] -= info[(x, y)]
if mat[x][y] < 0:
mat[x][y] = 0
year = 0
cnt = 0
while cnt < 2:
cnt = 0
year += 1
visited = [[0] * M for _ in range(N)]
for i in range(N):
for j in range(M):
if mat[i][j] and not visited[i][j]:
cnt += 1
visited[i][j] = 1
bfs(i, j)
if cnt == 0:
year = 1
break
print(year - 1)
BFS를 이용해 풀이했다.mat를 탐색하면서 얼음을 만나면 해당 얼음부터 bfs 탐색을 시작한다.(x, y)일 때 값을 1 증가 시킨다.deque에 얼음 좌표를 추가한다.deque에 남아있는 좌표가 없을 때까지 2로 돌아가 반복한다.info에 저장된 값을 이용해 1년 동안 얼음이 녹은 값을 계산한다.