๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด

๋ฌธ์ œ ์ด๋ฆ„ ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ
๋ฌธ์ œ ๋ฒˆํ˜ธ 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()


๐Ÿ’ก ๋ฐฐ์šด ์  & ๋А๋‚€ ์ 


TODO