π³ λ§ν¬
π λ¬Έμ
μ² μμ ν λ§ν λμ₯μμλ ν λ§ν λ₯Ό 보κ΄νλ ν° μ°½κ³ λ₯Ό κ°μ§κ³ μλ€. ν λ§ν λ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ 격μ λͺ¨μ μμμ μΉΈμ νλμ© λ£μ΄μ μ°½κ³ μ 보κ΄νλ€.
μ°½κ³ μ 보κ΄λλ ν λ§ν λ€ μ€μλ μ μ΅μ κ²λ μμ§λ§, μμ§ μ΅μ§ μμ ν λ§ν λ€λ μμ μ μλ€. λ³΄κ΄ ν νλ£¨κ° μ§λλ©΄, μ΅μ ν λ§ν λ€μ μΈμ ν κ³³μ μλ μ΅μ§ μμ ν λ§ν λ€μ μ΅μ ν λ§ν μ μν₯μ λ°μ μ΅κ² λλ€. νλμ ν λ§ν μ μΈμ ν κ³³μ μΌμͺ½, μ€λ₯Έμͺ½, μ, λ€ λ€ λ°©ν₯μ μλ ν λ§ν λ₯Ό μλ―Ένλ€. λκ°μ λ°©ν₯μ μλ ν λ§ν λ€μκ²λ μν₯μ μ£Όμ§ λͺ»νλ©°, ν λ§ν κ° νΌμ μ μ λ‘ μ΅λ κ²½μ°λ μλ€κ³ κ°μ νλ€. μ² μλ μ°½κ³ μ 보κ΄λ ν λ§ν λ€μ΄ λ©°μΉ μ΄ μ§λλ©΄ λ€ μ΅κ² λλμ§, κ·Έ μ΅μ μΌμλ₯Ό μκ³ μΆμ΄ νλ€.
ν λ§ν λ₯Ό μ°½κ³ μ 보κ΄νλ 격μλͺ¨μμ μμλ€μ ν¬κΈ°μ μ΅μ ν λ§ν λ€κ³Ό μ΅μ§ μμ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ‘μ λ, λ©°μΉ μ΄ μ§λλ©΄ ν λ§ν λ€μ΄ λͺ¨λ μ΅λμ§, κ·Έ μ΅μ μΌμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ. λ¨, μμμ μΌλΆ μΉΈμλ ν λ§ν κ° λ€μ΄μμ§ μμ μλ μλ€.
μ μ 1μ μ΅μ ν λ§ν , μ μ 0μ μ΅μ§ μμ ν λ§ν , μ μ -1μ ν λ§ν κ° λ€μ΄μμ§ μμ μΉΈμ λνλΈλ€.
πΎ νμ΄ λ°©λ²
- ν λ§ν κ° μλ€λ©΄, κ·Έ μμΉλ₯Ό νμ λ£μ΄μ€λ€.
- νκ° λΉ λ κΉμ§ whileλ¬Έμ λλ¦°λ€.
νμ μ¬μ΄μ¦λ§νΌ forλ¬Έμ λλ¦°λ€.
μνμ’μ°λ‘ μ΄λν΄μ μμ΅μ ν λ§ν κ° μλ€λ©΄ μ΅μ ν λ§ν λ‘ λ°κΎΈμ΄μ€λ€.
μ΅μ ν λ§ν λ‘ λ°λ μμΉλ₯Ό νμ λ€μ λ£μ΄μ€λ€. - whileλ¬Έμ΄ λλκ³ λμμ λ, ν λ§ν μ μμ΅μ ν λ§ν κ° μ‘΄μ¬νμ§ μλλ€λ©΄ while λ¬Έμ λλ¦° νμ μ¦, daysλ₯Ό 리ν΄νκ³ μλλ©΄ -1μ 리ν΄νλ€.
solution μ½λ
- bfsμ΄μ©, μ λ΅μ½λ
import sys import copy from collections import deque sys.setrecursionlimit(10**9) sys.stdin = open("input.txt","rt") dx = [1,-1,0,0] dy = [0,0,1,-1]
def bfs(tomatoes):
days = -1
while farm: #μ΅μ§μμ ν λ§ν κ° μ‘΄μ¬νλ λμ
days += 1
for _ in range(len(farm)):
x, y = farm.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<= nx < n and 0 <= ny < m and tomatoes[nx][ny] == 0:
tomatoes[nx][ny] = tomatoes[x][y] + 1
farm.append((nx,ny))
for tomato in tomatoes:
if 0 in tomato:
return -1
return days
m,n = map(int,sys.stdin.readline().split())
tomatoes = list()
for _ in range(n):
tomatoes.append(list(map(int,sys.stdin.readline().split())))
farm = deque()
for i in range(n):
for j in range(m):
if tomatoes[i][j] == 1:
farm.append((i,j)) #farmμ μ΅μ ν λ§ν μ μμΉλ₯Ό λ£μ΄μ€λ€.
print(bfs(tomatoes))
2. ν
μ€νΈμΌμ΄μ€λ§ λ§κ³ μκ°μ΄κ³Όλλ μ½λ
```python3
import sys
import copy
sys.setrecursionlimit(10**9)
sys.stdin = open("input.txt","rt")
dx = [1,-1,0,0]
dy = [0,0,1,-1]
def isNear(i,j):
global after
for _ in range(4):
x = i + dx[_]
y = j + dy[_]
if 0 <= x < n and 0 <= y < m and tomatoes[x][y] == 1:
after[i][j] = 1
return
m,n = map(int,sys.stdin.readline().split())
tomatoes = list()
for _ in range(n):
tomatoes.append(list(map(int,sys.stdin.readline().split())))
days = 0
after = copy.deepcopy(tomatoes)
while True:
days += 1
for i in range(n):
for j in range(m):
if tomatoes[i][j] == 0:
isNear(i,j)
if tomatoes == after:
chk = False
for k in range(n):
if 0 in tomatoes[k]:
chk = True
break
if chk: days = -1
else:
days -= 1
break
tomatoes = copy.deepcopy(after)
sys.stdout.write(str(days))