알고리즘/[Python] 백준

[Python] 백준 7576번 토마토

출처 : https://www.acmicpc.net/problem/7576

 

7576번: 토마토

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

www.acmicpc.net

 

풀이 방법

1. BFS 이용해서 시간 구하고,

2. for문 돌려서 0이 나오면 return -1, 아니면 T 반환.

 

 

Code

from collections import deque
# import sys
# input = sys.stdin.readline
 
def solve(n, m, board):
    queue = deque()
    for i in range(m):
        for j in range(n):
            if board[i][j] == 1: queue.append([i, j, 0]) # x, y, 시간
    # 동 남 서 북
    dxs = (010-1)
    dys = (10-10)
 
    while queue:
        x, y, t = queue.popleft()
        T = t
        for dx, dy in zip(dxs, dys):
            nx, ny = x+dx, y+dy
            if nx<0 or nx>=or ny<0 or ny>=n: continue
            if board[nx][ny] == 0:
                board[nx][ny] = 1
                queue.append([nx, ny, t+1])
    for i in range(m):
        for j in range(n):
            if board[i][j] == 0:
                return -1
    return T
 
 
if __name__ == '__main__':
    n, m = map(int, input().split())
    board = [list(map(int, input().split())) for _ in range(m)]
    print(solve(n, m, board))
cs