백준 python 기록
백준 파이썬 7576 토마토
작지
2021. 9. 24. 22:33
백준 링크:https://www.acmicpc.net/problem/7576
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
미로 탐색과 비슷한 유형의 BFS문제이다.
처음에는 시간 초과가 나오길래 뭔가 잘못되었다 생각했는데.
처음 배열 지정할때 1이 여러개있으면 QUEUE에 있는 수를 꺼내는데 많은 시간이 걸리기 떄문에
DEQUE를 사용해 시간 단축을 하였다.
import sys
from collections import deque
n,m=map(int,input().split())
queue=deque([])
s=[]
for i in range(m):
s.append(list(map(int,sys.stdin.readline().split())))
for j in range(n):
if s[i][j] == 1:
queue.append([i,j])
dx,dy=[-1,1,0,0],[0,0,-1,1]
while queue:
x,y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < m and 0 <= ny < n:
if s[nx][ny] == 0:
queue.append([nx,ny])
s[nx][ny] = s[x][y] + 1
max_s = 0
for i in s:
for j in i:
if j == 0:
print(-1)
exit()
max_s = max(max_s,j)
print(max_s-1)