💡문제접근
- 치즈가 있는 부분
c
가 공기와 접촉된 칸이 단 한 칸이라도 존재한다면 녹아 없어지므로 0으로 바꿔준다.
- 이중 for문을 돌려 남아있는 치즈의 개수를 저장하도록 코드를 작성한 다음 치즈가 모두 녹기 한 시간 전에 남아있는 치즈조각의 개수 즉,
cheese_li[-2]
도 출력해줬다.
💡코드(메모리 : 34176KB, 시간 : 132ms)
from collections import deque
import sys
input = sys.stdin.readline
def BFS():
queue = deque()
queue.append((0, 0))
visited[0][0] = True
while queue:
x, y = queue.popleft()
dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= N or ny < 0 or ny >= M:
continue
if 0 <= nx < N and 0 <= ny < M and not visited[nx][ny]:
if cheese[nx][ny] >= 1:
cheese[nx][ny] += 1
else:
visited[nx][ny] = True
queue.append((nx, ny))
N, M = map(int, input().strip().split())
cheese = [list(map(int, input().strip().split())) for _ in range(N)]
time = 0
cheese_li = []
while True:
flag = 0
cheese_cnt = 0
visited = [[False for _ in range(M)] for _ in range(N)]
BFS()
for i in range(N):
for j in range(M):
if cheese[i][j] >= 1:
cheese_cnt += 1
if cheese[i][j] >= 2:
cheese[i][j] = 0
flag = 1
cheese_li.append(cheese_cnt)
if flag:
time += 1
else:
break
print(time)
print(cheese_li[-2])
💡소요시간 : 19m