1from collections import deque
2
3dx = [0, 0, -1, 1]
4dy = [-1, 1, 0, 0]
5
6N, M = map(int, input().split())
7L = [list(map(int, input().split())) for _ in range(N)]
8
9def check():
10 q = deque()
11 q.append((0, 0))
12
13 visited = [[0]*M for _ in range(N)]
14 visited[0][0] = 1
15
16 while q:
17 curX, curY = q.popleft()
18
19 for i in range(4):
20 nX = curX + dx[i]
21 nY = curY + dy[i]
22
23 if 0 <= nX < N and 0 <= nY < M:
24 if L[nX][nY] == 0 and visited[nX][nY] == 0:
25 q.append((nX, nY))
26 visited[nX][nY] = 1
27 elif L[nX][nY] == 1:
28 visited[nX][nY] += 1
29 melted = []
30 for i in range(N):
31 for j in range(M):
32 if visited[i][j] >= 2:
33 melted.append((i, j))
34
35 return melted
36
37result = 0
38
39while True:
40 isAnyCheese = False
41
42 melted = check()
43
44 if not melted:
45 break
46
47 for x, y in melted:
48 L[x][y] = 0
49
50 result += 1
51
52print (result)
문제
- N X M 크기의 판 위에 치즈가 표시되어 있다
- 2변 이상의 실외의 공기와 접촉하면 해당 치즈는 녹는다
- 치즈가 모두 녹을 때까지 걸리는 시간을 구하라
해결방법
- 외부공기를 따라 BFS를 수행한다
- 두 번이상 visit된 치즈는 melted 리스트에 넣었다가 한번에 녹인다
- 녹은 치즈가 없다면 모든 치즈가 녹은 것으로 간주한다
고찰
- 여러 시도 이후 메모리 초과를 해결하지 못해 답을 찾아보았다.