[골드4] 2638번 : 치즈

Quesuemon·2021년 4월 8일
0

코딩테스트 준비

목록 보기
68/111

🛠 문제

https://www.acmicpc.net/problem/2638


👩🏻‍💻 해결 방법

while문 안에서 우선 bfs를 실행해주었다
bfs함수는 (0,0)부터 시작하여 상하좌우를 확인했을 때 해당 위치가 치즈이면 해당 위치 값에 +1을 해주었다
따라서 bfs 함수 실행 후 graph 값이 3 이상이라면 2변이상 실외온도와 접촉한것으로 판단되어 graph 값을 0으로 만들어 치즈를 녹여주었다
만약 graph 값이 2라면 1변만 실외온도와 접촉한 것이므로 graph 값을 다시 1로 만들어주었다
chk 변수의 초기값을 False로 설정하고 치즈가 녹았을 때는 True로 설정하여, chk가 False일 경우 더 이상 녹을 치즈가 없는 것으로 판단하여 break를 해주었다

소스 코드

from collections import deque

n, m = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]

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

def bfs():
  q = deque()
  visit = [[-1] * m for _ in range(n)]
  q.append((0, 0))
  visit[0][0] = 0

  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 visit[nx][ny] == -1:
          if graph[nx][ny] >= 1:
            graph[nx][ny] += 1
          else:
            visit[nx][ny] = 0
            q.append((nx, ny))

result = 0
while True:
  bfs()
  chk = False

  for i in range(n):
    for j in range(m):
      if graph[i][j] >= 3:
        graph[i][j] = 0
        chk = True
      elif graph[i][j] == 2:
        graph[i][j] = 1
  
  if chk:
    result += 1
  else:
    break

print(result)

0개의 댓글