GitHub

https://github.com/Choidongjun0830

파이썬 알고리즘 문제 풀이

Baekjoon Online Judge 7576번 파이썬

gogi masidda 2022. 8. 16. 17:31

문제링크
https://www.acmicpc.net/problem/7576

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토

www.acmicpc.net


여러 개의 익은 토마토로부터 시작하기 위해, 큐를 함수 밖에서 선언하고 큐 삽입을 선언한다.

정답 코드

import sys
from collections import deque

def bfs():
  while queue:
    x, y = queue.popleft()

    for i in range(4):
      pointX = x + dx[i]
      pointY = y + dy[i]
      if 0<=pointX<N and 0<=pointY<M:
        if box[pointX][pointY] == -1:
          continue
        if box[pointX][pointY] == 0:
          box[pointX][pointY] = box[x][y] + 1
          queue.append([pointX,pointY])
  return box
  
queue = deque()
M, N = map(int,sys.stdin.readline().split())
box = []
for i in range(N):
  box.append(list(map(int,sys.stdin.readline().split())))
dx = [0,0,-1,1]
dy = [-1,1,0,0]

for i in range(N):
  for j in range(M):
    if box[i][j] == 1:
      queue.append((i,j))
      
result = bfs()

for i in box:
  for j in i:
    if j == 0:
      print(-1)
      exit(0)
print(max(map(max,result))-1)
728x90