2021. 1. 17. 03:45γπ Algorithm/πͺπ» Python λ¬Έμ νμ΄
λ¬Έμ μ€λͺ
μ² μμ ν λ§ν λμ₯μμλ ν λ§ν λ₯Ό 보κ΄νλ ν° μ°½κ³ λ₯Ό κ°μ§κ³ μλ€. ν λ§ν λ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ 격μ λͺ¨μ μμμ μΉΈμ νλμ© λ£μ΄μ μ°½κ³ μ 보κ΄νλ€.
μ°½κ³ μ 보κ΄λλ ν λ§ν λ€ μ€μλ μ μ΅μ κ²λ μμ§λ§, μμ§ μ΅μ§ μμ ν λ§ν λ€λ μμ μ μλ€. λ³΄κ΄ ν νλ£¨κ° μ§λλ©΄, μ΅μ ν λ§ν λ€μ μΈμ ν κ³³μ μλ μ΅μ§ μμ ν λ§ν λ€μ μ΅μ ν λ§ν μ μν₯μ λ°μ μ΅κ² λλ€. νλμ ν λ§ν μ μΈμ ν κ³³μ μΌμͺ½, μ€λ₯Έμͺ½, μ, λ€ λ€ λ°©ν₯μ μλ ν λ§ν λ₯Ό μλ―Ένλ€. λκ°μ λ°©ν₯μ μλ ν λ§ν λ€μκ²λ μν₯μ μ£Όμ§ λͺ»νλ©°, ν λ§ν κ° νΌμ μ μ λ‘ μ΅λ κ²½μ°λ μλ€κ³ κ°μ νλ€. μ² μλ μ°½κ³ μ 보κ΄λ ν λ§ν λ€μ΄ λ©°μΉ μ΄ μ§λλ©΄ λ€ μ΅κ² λλμ§, κ·Έ μ΅μ μΌμλ₯Ό μκ³ μΆμ΄ νλ€.
ν λ§ν λ₯Ό μ°½κ³ μ 보κ΄νλ 격μλͺ¨μμ μμλ€μ ν¬κΈ°μ μ΅μ ν λ§ν λ€κ³Ό μ΅μ§ μμ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ‘μ λ, λ©°μΉ μ΄ μ§λλ©΄ ν λ§ν λ€μ΄ λͺ¨λ μ΅λμ§, κ·Έ μ΅μ μΌμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ. λ¨, μμμ μΌλΆ μΉΈμλ ν λ§ν κ° λ€μ΄μμ§ μμ μλ μλ€.
μ λ ₯νμ
첫 μ€μλ μμμ ν¬κΈ°λ₯Ό λνλ΄λ λ μ μ M,Nμ΄ μ£Όμ΄μ§λ€. Mμ μμμ κ°λ‘ μΉΈμ μ, Nμ μμμ μΈλ‘ μΉΈμ μλ₯Ό λνλΈλ€. λ¨, 2 ≤ M,N ≤ 1,000 μ΄λ€. λμ§Έ μ€λΆν°λ νλμ μμμ μ μ₯λ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ§λ€. μ¦, λμ§Έ μ€λΆν° Nκ°μ μ€μλ μμμ λ΄κΈ΄ ν λ§ν μ μ λ³΄κ° μ£Όμ΄μ§λ€. νλμ μ€μλ μμ κ°λ‘μ€μ λ€μ΄μλ ν λ§ν μ μνκ° Mκ°μ μ μλ‘ μ£Όμ΄μ§λ€. μ μ 1μ μ΅μ ν λ§ν , μ μ 0μ μ΅μ§ μμ ν λ§ν , μ μ -1μ ν λ§ν κ° λ€μ΄μμ§ μμ μΉΈμ λνλΈλ€.
ν λ§ν κ° νλ μ΄μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μΆλ ₯νμ
μ¬λ¬λΆμ ν λ§ν κ° λͺ¨λ μ΅μ λκΉμ§μ μ΅μ λ μ§λ₯Ό μΆλ ₯ν΄μΌ νλ€. λ§μ½, μ μ₯λ λλΆν° λͺ¨λ ν λ§ν κ° μ΅μ΄μλ μνμ΄λ©΄ 0μ μΆλ ₯ν΄μΌ νκ³ , ν λ§ν κ° λͺ¨λ μ΅μ§λ λͺ»νλ μν©μ΄λ©΄ -1μ μΆλ ₯ν΄μΌ νλ€.
μ μΆλ ₯ μμ
νμ΄ κ³Όμ
κΈ°μ‘΄μ νμλ BFS λ¬Έμ μμ μ½κ°μ μμ©μ΄ ν¬ν¨λ λ¬Έμ μλ€. μμ νλμ©μ κΊΌλ΄μ΄ bfsλ₯Ό κ²μ¬νλ κ²μ΄ μλ bfs μ tomato μ€ '1'μ κ°μ§κ³ μλ κ²λ€μ queueμ λ£μ΄μ bfsλ₯Ό μ€νν΄μ€μΌ νλ©°, ν λ§ν κ° λͺ¨λ μ΅λ λ μ§λ₯Ό νλ¦°νΈ ν΄μ£ΌκΈ° μν΄ queueμ count+1λ λν΄ μ€μΌ νλ€.
+ κΈ°μ‘΄ bfs λ°©μμ λμΌνλ λμ€μ λͺ¨λ ν λ§ν λ₯Ό λ°©λ¬Ένμ λ, μ΅νμ μλ ν λ§ν κ° μ‘΄μ¬νλ κ²μ check ν¨μλ₯Ό ν΅ν΄ νμΈν΄μΌνλ―λ‘ tomato μ€ -1μ κ°μ κ°λ κ²μ check = Trueλ‘ λ³κ²½ν΄μ£Όκ³ μμν΄μΌνλ€.
+ bfs λ₯Ό ν΅ν΄ queueμ append ν λλ μΌμκ° ν루 μ¦κ°ν΄μΌνλ―λ‘ answer +1 ν΄μ£Όλ κ²λ μ€μν ν¬μΈνΈμ΄λ€.
from collections import deque
import sys
def bfs(queue):
dxy = [(-1, 0), (1, 0), (0, 1), (0, -1)]
while queue:
item = queue.popleft()
answer = item[2]
check[item[0]][item[1]] = True
for dx, dy in dxy:
new_x = int(dx) + int(item[0])
new_y = int(dy) + int(item[1])
if 0 <= new_x < m and 0 <= new_y < n and not check[new_x][new_y]:
if tomato[new_x][new_y] == 0:
check[new_x][new_y] = True
queue.append([new_x, new_y, answer + 1])
return answer
if __name__ == '__main__':
n, m = map(int, sys.stdin.readline().split())
check = [[False for _ in range(n)] for _ in range(m)]
tomato = []
answer = 0
queue = deque()
for _ in range(m):
tomato.append(list(map(int, sys.stdin.readline().split())))
for row in range(m):
for col in range(n):
if tomato[row][col] == 1:
queue.append([row, col, answer])
elif tomato[row][col] == -1:
check[row][col] = True
answer = bfs(queue)
for row in range(m):
for col in range(n):
if not check[row][col]:
answer = -1
print(answer)
'π Algorithm > πͺπ» Python λ¬Έμ νμ΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Python - νλ‘κ·Έλλ¨Έμ€ Level2] μ νλ²νΈ (0) | 2021.01.19 |
---|---|
[Python - λ°±μ€ 2178] λ―Έλ‘ νμ (0) | 2021.01.12 |
[Python - λ°±μ€ 1012] μ κΈ°λ λ°°μΆ (0) | 2021.01.12 |