[Python] λ°±μ€ 7576 ν λ§ν (BFS)


π λ¬Έμ
μ² μμ ν λ§ν λμ₯μμλ ν λ§ν λ₯Ό 보κ΄νλ ν° μ°½κ³ λ₯Ό κ°μ§κ³ μλ€. ν λ§ν λ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ 격μ λͺ¨μ μμμ μΉΈμ νλμ© λ£μ΄μ μ°½κ³ μ 보κ΄νλ€.

μ°½κ³ μ 보κ΄λλ ν λ§ν λ€ μ€μλ μ μ΅μ κ²λ μμ§λ§, μμ§ μ΅μ§ μμ ν λ§ν λ€λ μμ μ μλ€. λ³΄κ΄ ν νλ£¨κ° μ§λλ©΄, μ΅μ ν λ§ν λ€μ μΈμ ν κ³³μ μλ μ΅μ§ μμ ν λ§ν λ€μ μ΅μ ν λ§ν μ μν₯μ λ°μ μ΅κ² λλ€. νλμ ν λ§ν μ μΈμ ν κ³³μ μΌμͺ½, μ€λ₯Έμͺ½, μ, λ€ λ€ λ°©ν₯μ μλ ν λ§ν λ₯Ό μλ―Ένλ€. λκ°μ λ°©ν₯μ μλ ν λ§ν λ€μκ²λ μν₯μ μ£Όμ§ λͺ»νλ©°, ν λ§ν κ° νΌμ μ μ λ‘ μ΅λ κ²½μ°λ μλ€κ³ κ°μ νλ€. μ² μλ μ°½κ³ μ 보κ΄λ ν λ§ν λ€μ΄ λ©°μΉ μ΄ μ§λλ©΄ λ€ μ΅κ² λλμ§, κ·Έ μ΅μ μΌμλ₯Ό μκ³ μΆμ΄ νλ€.
ν λ§ν λ₯Ό μ°½κ³ μ 보κ΄νλ 격μλͺ¨μμ μμλ€μ ν¬κΈ°μ μ΅μ ν λ§ν λ€κ³Ό μ΅μ§ μμ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ‘μ λ, λ©°μΉ μ΄ μ§λλ©΄ ν λ§ν λ€μ΄ λͺ¨λ μ΅λμ§, κ·Έ μ΅μ μΌμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ. λ¨, μμμ μΌλΆ μΉΈμλ ν λ§ν κ° λ€μ΄μμ§ μμ μλ μλ€.
μ λ ₯
첫 μ€μλ μμμ ν¬κΈ°λ₯Ό λνλ΄λ λ μ μ M,Nμ΄ μ£Όμ΄μ§λ€. Mμ μμμ κ°λ‘ μΉΈμ μ, Nμ μμμ μΈλ‘ μΉΈμ μλ₯Ό λνλΈλ€. λ¨, 2 ≤ M,N ≤ 1,000 μ΄λ€. λμ§Έ μ€λΆν°λ νλμ μμμ μ μ₯λ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ§λ€. μ¦, λμ§Έ μ€λΆν° Nκ°μ μ€μλ μμμ λ΄κΈ΄ ν λ§ν μ μ λ³΄κ° μ£Όμ΄μ§λ€. νλμ μ€μλ μμ κ°λ‘μ€μ λ€μ΄μλ ν λ§ν μ μνκ° Mκ°μ μ μλ‘ μ£Όμ΄μ§λ€. μ μ 1μ μ΅μ ν λ§ν , μ μ 0μ μ΅μ§ μμ ν λ§ν , μ μ -1μ ν λ§ν κ° λ€μ΄μμ§ μμ μΉΈμ λνλΈλ€.
ν λ§ν κ° νλ μ΄μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μΆλ ₯
μ¬λ¬λΆμ ν λ§ν κ° λͺ¨λ μ΅μ λκΉμ§μ μ΅μ λ μ§λ₯Ό μΆλ ₯ν΄μΌ νλ€. λ§μ½, μ μ₯λ λλΆν° λͺ¨λ ν λ§ν κ° μ΅μ΄μλ μνμ΄λ©΄ 0μ μΆλ ₯ν΄μΌ νκ³ , ν λ§ν κ° λͺ¨λ μ΅μ§λ λͺ»νλ μν©μ΄λ©΄ -1μ μΆλ ₯ν΄μΌ νλ€.
μμ μ λ ₯ 1
6 4
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
μμ μΆλ ₯ 1
8
μμ μ λ ₯ 2
6 4
0 -1 0 0 0 0
-1 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
μμ μΆλ ₯ 2
-1
μμ μ λ ₯ 3
6 4
1 -1 0 0 0 0
0 -1 0 0 0 0
0 0 0 0 -1 0
0 0 0 0 -1 1
μμ μΆλ ₯ 3
6
μμ μ λ ₯ 4
5 5
-1 1 0 0 0
0 -1 -1 -1 0
0 -1 -1 -1 0
0 -1 -1 -1 0
0 0 0 0 0
μμ μΆλ ₯ 4
14
μμ μ λ ₯ 5
2 2
1 -1
-1 1
μμ μΆλ ₯ 5
0
π νμ΄
π¬ Code
import sys
from collections import deque
input = sys.stdin.readline
m, n = map(int, input().split())
box = []
tomato = []
for i in range(n):
box.append(list(map(int, input().split())))
for j in range(m):
if box[i][j] == 1:
tomato.append((0, i, j))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
q = deque(tomato)
while q:
day, 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 and box[nx][ny] == 0:
box[nx][ny] = 1
q.append((day+1, nx, ny))
for i in range(n):
if 0 in box[i]:
print(-1)
sys.exit(0)
print(day)
π‘ Solution
m, n = map(int, input().split())
box = []
tomato = []
for i in range(n):
box.append(list(map(int, input().split())))
for j in range(m):
if box[i][j] == 1:
tomato.append((0, i, j))
- box: κ° μμμ ν λ§ν μνλ₯Ό μ μ₯νλ 2μ°¨μ 리μ€νΈ
- tomato: μ΅μ ν λ§ν κ° μλ μμΉλ₯Ό μ μ₯νλ 리μ€νΈ. 0μ μ΄ ν λ§ν κ° μ΅μ λ μ§λ₯Ό μλ―Έν©λλ€.
q = deque(tomato)
while q:
day, 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 and box[nx][ny] == 0:
box[nx][ny] = 1
q.append((day+1, nx, ny))
μ΅λ§ν κ° μλ μμΉμ κ·Όμ²λ§ μ΄ν΄λ³΄κΈ° μν΄μ λ±μ tomatoλ₯Ό λ΄μμ΅λλ€.
(nx, ny)λ μ΅λ§ν μ μμΉμΈ (x, y)λ‘λΆν° μ/ν/μ’/μ°λ‘ μ΄λν μμΉλ₯Ό λνλ λλ€. μ΄ μ΄λμμΉμ λλ§ν κ° μλ€λ©΄ μ΅λλ‘ λ°κΏμ€λλ€. μ΄ λλ§ν κ° μ΅μ λ μ§λ μ΅λ§ν κ° μ΅μ λ μ§μ λ€μ λ μ΄λ―λ‘ λ±μ day+1μ λ£μ΄μ€λλ€.
μ κ·Ό κ°λ₯ν λλ§ν λ₯Ό λ€ μ΅ν쀬λ€λ©΄ ifλ¬Έμλ λ€μ΄κ° μΌμ΄ μμ΄μ§λλ€. λλ¬Έμ dayκ° λ°λ μΌμ΄ μκ³ , λΉμ°ν μ΅μ’
μ μΌλ‘ dayμλ ν λ§ν κ° λͺ¨λ μ΅κ² λ λ μ§κ° μ μ₯λλ―λ‘ print(day)ν΄μ£Όλ©΄ μ λ΅μ²λ¦¬λ₯Ό λ°μ μ μμ΅λλ€.
for i in range(n):
if 0 in box[i]:
print(-1)
sys.exit(0)
print(day)
λ¨! ν λ§ν κ° λͺ¨λ μ΅μ§ λͺ»νλ μν©μ μΆλ ₯μ λ€λ₯΄κ² ν΄μ€μΌ νκΈ° λλ¬Έμ boxλ₯Ό λλ©΄μ λλ§ν κ° μ‘΄μ¬νλ©΄ -1μ μΆλ ₯νκ³ μ’ λ£μν΅λλ€.