💡문제접근

  • 치즈가 있는 부분 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

0개의 댓글