백준 7576번 바로가기

나의 풀이

from collections import deque

# 입력
m,n=map(int,input().split())
tomato = [list(map(int,input().split())) for _ in range(n)]
queue = deque([])  
dx = [-1,1,0,0]
dy = [0,0,-1,1]

# 처리
for i in range(n):
  for j in range(m):
    if tomato[i][j] == 1:
      queue.append([i,j])

def ripe():
  while queue:
    x,y = queue.popleft()
    
    for i in range(4):
      nx = x + dx[i]
      ny = y + dy[i]

      if 0<=nx<n and 0<=ny<m and tomato[nx][ny] == 0:
        tomato[nx][ny] = tomato[x][y] + 1
        queue.append([nx,ny])

ripe()
for i in range(n):
  for j in range(m):
    if tomato[i][j] == 0:
      print(-1)
      exit(0)
print(max(map(max, tomato))-1)

CODE REVIEW

  1. 2606번-바이러스문제와 1012번-유기농 배추와 결이 같은 문제. graph 문제를 풀다보니 이제는 다 비슷비슷해 보인다.
  2. stack에 익어있는 토마토를 집어놓고 하나씩 꺼내가며 옆의 토마토들을 익히는 과정을 반복한다. 모두 반복하고 마지막 결과물에서 익지 않은 토마토가 있는지 확인하고, 최댓값을 출력한다.
  3. 논리상에 문제가 없는데 2%에서 자꾸 틀렸습니다라길래 코드를 살펴봐도 문제를 찾을 수 없었다. 알고보니 출력 부분에서 최대값을 찾는 과정에서 문제가 생긴 것!
    • 2차원 배열의 경우 그냥 max(max(array))로 구하면 안되고, max(map(max,array))로 구해야 한다.
  4. 7569번 토마토는 3차원 배열이던데 이것도 도전해보자.