โ๋ฌธ์
https://www.acmicpc.net/problem/14940
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 41932 KB, ์๊ฐ: 488 ms
๋ถ๋ฅ
๋๋น ์ฐ์ ํ์, ๊ทธ๋ํ ์ด๋ก , ๊ทธ๋ํ ํ์
๋ฌธ์ ์ค๋ช
์ง๋๊ฐ ์ฃผ์ด์ง๋ฉด ๋ชจ๋ ์ง์ ์ ๋ํด์ ๋ชฉํ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ์ฌ๋ผ.
๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ค์ง ๊ฐ๋ก์ ์ธ๋ก๋ก๋ง ์์ง์ผ ์ ์๋ค๊ณ ํ์.
โ๐ปํ์ด
์ด ๋ฌธ์ ๋ BFS์ด๋ค. ๋ฌธ์ ์์ 2๋ ๋ชฉํ์ง์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๊ตฌํด์ผ ํ๋ ๊ฒ์ ๊ฐ ๊ฐ ์ ์๋ ๋ ์์์ ๋ชฉํ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ถ๋ฐ์ง๋ฅผ ๋ชฉํ์ง์ ์ผ๋ก ๋๋ฉด ๋๋ค.
๋ชฉํ์ง์ ์ด ์ ํํ (0, 0)์์ ์ฃผ์ด์ง๋ค๋ ๋ณด์ฅ์ด ์์ผ๋ฏ๋ก ์ฐ๋ฆฌ๋ ๋ชฉํ์ง์ ์ ์ฐพ์์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชฉํ์ง์ ์ ์ฐพ์ ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ฉด ๋๋ค. ์ด ๋, ๋ฐฉ๋ฌธํ ๊ณณ์ธ์ง๋ฅผ ํ์ํ๋ ๋์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด visited๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ๊ณ์ฐํ๋ค.
๊ฐ ๊ฑฐ๋ฆฌ์ ๊ณ์ฐ์ด ๋๋๋ฉด ๊ฐ ์ ์๋ ๋ ์ด์ง๋ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ -1๋ก ์ถ๋ ฅํ๊ณ ๋๋จธ์ง๋ visited ๊ฐ์ผ๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐ป์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
visited = [[0 for _ in range(m)] for _ in range(n)]
dy = [1, 0, 0, -1]
dx = [0, 1, -1, 0]
q = deque()
def bfs(y, x):
q.append((y, x))
board[y][x] = 0
while q:
y, x = q.popleft()
for i in range(4):
ny, nx = y + dy[i], x + dx[i]
if 0 <= ny < n and 0<= nx < m and not visited[ny][nx] and board[ny][nx] == 1:
visited[ny][nx] = visited[y][x] + 1
q.append((ny, nx))
for y in range(n):
for x in range(m):
if board[y][x] == 2:
bfs(y, x)
break
for y in range(n):
for x in range(m):
if board[y][x] > 0 and not visited[y][x]:
print(-1, end=' ')
else:
print(visited[y][x], end=' ')
print()
๐ํ๊ธฐ
bfs ๋ถ๋ถ์ ํจ์๋ก ๋ฐ๋ก ๋นผ์ ๋ง๋ค์๋๋ ์๊ฐ์ด ์ค์๋ค. ๊ทธ๋ฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ๋ ์ด๋ป๊ฒ ํ๋ฉด ์ค์ผ ์ ์์๊น?
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1966. ํ๋ฆฐํฐ ํ/Python - Silver3 (0) | 2025.03.18 |
---|---|
[๋ฐฑ์ค] 2800. ๊ดํธ ์ ๊ฑฐ/Python - Gold4 (0) | 2025.03.18 |
[๋ฐฑ์ค] 17298.์คํฐ์/Python - Gold4 (0) | 2025.03.07 |
[๋ฐฑ์ค] 2493. ํ/Python - Gold5 (0) | 2025.03.01 |
[๋ฐฑ์ค] 1202. ๋ณด์ ๋๋/Python - Gold2 (0) | 2025.02.28 |