ํ’€์ด


์—ญ์‹œ๋‚˜ BFS ๋ฌธ์ œ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ์—” ์‹œ์ž‘์ ์ด ์—ฌ๋Ÿฌ๊ฐœ์ธ ํƒ์ƒ‰์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์š”๊ตฌํ–ˆ๋‹ค.

๋จผ์ € ์ž…๋ ฅ์œผ๋กœ ์ •๋ณด๋ฅผ ๋ฐ›์€ ๋’ค ์ต์–ด์žˆ๋Š” ํ† ๋งˆํ† ์˜ ์ขŒํ‘œ๋ฅผ ํ์— ์ง‘์–ด๋„ฃ์–ด๋‘”๋‹ค.

์ดํ›„ BFS ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ต์–ด์žˆ๋Š” ํ† ๋งˆํ† ์™€ ์ธ์ ‘ํ•œ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค์„ ์ฐพ์€ ๋’ค ์ฒ˜์Œ ์ต์–ด์žˆ๋˜ ํ† ๋งˆํ† ๋Š” 1 ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋‹ˆ ๋ฐ”๋กœ ์ธ์ ‘ํ•œ ํ† ๋งˆํ† ๋“ค์„ +1 ํ•˜์—ฌ ์ €์žฅํ•ด์ค€๋‹ค. ์ด ๊ณผ์ •์„ BFS ๊ฐ€ ๋๋‚  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

์ดํ›„ BFS ๊ฐ€ ์ข…๋ฃŒ๋œ ์ƒํƒœ์—์„œ์˜ 2์ฐจ์› ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์ถœ๋ ฅ์กฐ๊ฑด์— ๋งž์ถฐ์„œ,

์ต์ง€์•Š์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ -1 ์„,

์ด๋ฏธ ๋‹ค ์ต์–ด ์žˆ์„ ๊ฒฝ์šฐ 0 ์„,

์•„๋‹ˆ๋ผ๋ฉด ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž์—์„œ -1 ์„ ํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด๋œ๋‹ค.

์†Œ์Šค์ฝ”๋“œ


# ํ† ๋งˆํ† 
from collections import deque
import sys
input = sys.stdin.readline
 
def bfs():
    while q:
        x, y = q.popleft()
        for k in range(4):
            nx = x + dx[k]
            ny = y + dy[k]
            if 0 <= nx < n and 0 <= ny < m and graph[nx][ny] == 0:  # ๋ฒ”์œ„ ๋‚ด ์ด๋ฉด์„œ ์ต์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ
                q.append([nx, ny])
                graph[nx][ny] = graph[x][y] + 1  # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ๊ฒธ ์ผ์ˆ˜ ๊ณ„์‚ฐ
    return
 
 
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
 
m, n = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
q = deque()
 
for i in range(n):
    for j in range(m):
        if graph[i][j] == 1:
            q.append([i, j])  # ์ด๋ฏธ ์ต์–ด์žˆ๋Š” ํ† ๋งˆํ† ๋“ค์„ ํ์— ์‚ฝ์ž…
 
bfs()  # BFS ์‹คํ–‰
 
allRipe = True
ans = 0
for i in range(n):
    for j in range(m):
        if graph[i][j] == 0:
            allRipe = False
            break
        ans = max(ans, graph[i][j])
 
if allRipe == False:
    print(-1)
elif ans == 1:
    print(0)
else:
    print(ans - 1)

References