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
input = sys.stdin.readline

def solution():
    m,n = 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()
        for i in range(n):
            for j in range(m):
                if graph[i][j]==1:
                    q.append([i,j])
        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 graph[nx][ny] == 0:
                        q.append((nx,ny))
                        graph[nx][ny] = graph[x][y] + 1
    bfs()
    left_over = False
    max_days = -1
    for i in range(n):
        for j in range(m):
            if graph[i][j]==0:
                left_over = True
            max_days = max(max_days,graph[i][j])
    if left_over:
        print(-1)
    else:
        print(max_days-1)        

solution()

많이들 그랬을꺼같은데 N,M 가(로세로) 생각을 잘 해야한다. 아무생각없이 하면 틀린다.


다른사람의 풀이

 



 

'취준 > 백준' 카테고리의 다른 글

1504 - 파이썬  (0) 2022.07.27
7569 - 파이썬  (0) 2022.07.26
2606 - 파이썬  (0) 2022.07.13
24445 - 파이썬  (0) 2022.07.11
24479 - 파이썬  (0) 2022.07.11

+ Recent posts