๋ฌธ์ ์ด๋ฆ | ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ |
---|---|
๋ฌธ์ ๋ฒํธ | 14940 |
๋์ด๋ | Silver 1 |
๋ฌธ์ ๋งํฌ | https://www.acmicpc.net/problem/14940 |
ํ์ด ์ธ์ด | Python |
์ด ๋ฌธ์ ๋ ๋ชฉํ ์ง์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ง์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ผ์, BFS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ์จ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค
๋จผ์ ๋ชฉํ ์ง์ (2)์ ์ฐพ์ ํ์ ๋ฃ๊ณ , ํด๋น ์์น์ ๊ฑฐ๋ฆฌ๋ฅผ 0์ผ๋ก ์ค์ ํ๋ค
๊ทธ ๋ค์, BFS๋ฅผ ๋๋ฉด์ ์, ํ, ์ข, ์ฐ๋ก ํ ์นธ์ฉ ์ด๋ํ ๋๋ง๋ค ๊ฑฐ๋ฆฌ๋ฅผ 1์ฉ ์ฆ๊ฐ์์ผ distance
๋ฐฐ์ด์ ๊ธฐ๋กํ๋ค
๋ฐฉ๋ฌธ ์ฌ๋ถ๋ distance
๋ฐฐ์ด์ ์ด๊ธฐ๊ฐ์ธ -1๋ก ํ์ธํ๋ค. -1์ด๋ฉด ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ผ๋ก ๊ฐ์ฃผํ๊ณ ํ์์ ๊ณ์ ์งํํ๋ค
๋ง์ง๋ง์ผ๋ก, ์๋ ๊ฐ ์ ์๋ ๋
(0)์ด์๋ ๊ณณ์ distance
๊ฐ๊ณผ ์๊ด์์ด 0์ผ๋ก ์ถ๋ ฅํ๊ณ , ๋๋ฌํ ์ ์๋ ๊ณณ์ ์ด๊ธฐ๊ฐ -1์ด ๊ทธ๋๋ก ์ถ๋ ฅ๋๋๋ก ์ฒ๋ฆฌํ๋ค
from collections import deque
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
graph = []
start_x, start_y = -1, -1
for i in range(n):
row = list(map(int, input().split()))
graph.append(row)
for j in range(m):
if row[j] == 2:
start_x, start_y = i, j
distance = [[-1] * m for _ in range(n)]
distance[start_x][start_y] = 0
q = deque([(start_x, start_y)])
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
while q:
x, y = q.popleft()
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < n and 0 <= ny < m and distance[nx][ny] == -1 and graph[nx][ny] == 1:
distance[nx][ny] = distance[x][y] + 1
q.append((nx, ny))
for i in range(n):
for j in range(m):
if graph[i][j] == 0:
print(0, end=" ")
else:
print(distance[i][j], end=" ")
print()
dx
, dy
๋ฐฐ์ด์ ํ์ฉํ์ฌ ์, ํ, ์ข, ์ฐ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ํ๋ ๋ฐฉ๋ฒ์ ์ตํ๋คdistance
๋ฐฐ์ด์ -1๋ก ์ด๊ธฐํํ์ฌ โ๋ฐฉ๋ฌธํ์ง ์์โ๊ณผ โ๋๋ฌํ ์ ์์โ์ ๋์์ ํํํ๋ ์์ด๋์ด๊ฐ ์์ฃผ ์ ์ฉํ๋ค๋ ๊ฒ์ ๋๊ผ๋ค