๐ก ์กฐ๊ฑด
- NรM ํฌ๊ธฐ์ ๊ณต๊ฐ์ ์๊ธฐ ์์ด ์ฌ๋ฌ ๋ง๋ฆฌ๊ฐ ์๋ค. ๊ณต๊ฐ์ 1ร1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์๋ ์๊ธฐ ์์ด๊ฐ ์ต๋ 1๋ง๋ฆฌ ์กด์ฌํ๋ค.
N๊ณผ M(2 โค N, M โค 50)
- ์ด๋ค ์นธ์ ์์ ๊ฑฐ๋ฆฌ๋ ๊ทธ ์นธ๊ณผ ๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ์๊ธฐ ์์ด์์ ๊ฑฐ๋ฆฌ์ด๋ค.
๋ ์นธ์ ๊ฑฐ๋ฆฌ๋ ํ๋์ ์นธ์์ ๋ค๋ฅธ ์นธ์ผ๋ก ๊ฐ๊ธฐ ์ํด์ ์ง๋์ผ ํ๋ ์นธ์ ์์ด๊ณ , ์ด๋์ ์ธ์ ํ 8๋ฐฉํฅ(๋๊ฐ์ ํฌํจ)์ด ๊ฐ๋ฅํ๋ค.
- 0์ ๋น ์นธ, 1์ ์๊ธฐ ์์ด๊ฐ ์๋ ์นธ์ด๋ค.
- ๋น ์นธ๊ณผ ์์ด์ ์๊ฐ ๊ฐ๊ฐ ํ ๊ฐ ์ด์์ธ ์
๋ ฅ๋ง ์ฃผ์ด์ง๋ค.
- ์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ํฐ ์นธ์ ๊ตฌํ๋ ๋ฌธ์ .
- heapq, ์ฐ์ ์์ ํ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin
import heapq
n, m = map(int, stdin.readline().split())
arr, shark = [], []
dx, dy = [1, 0, 0, -1, 1, -1, 1, -1], [0, 1, -1, 0, 1, -1, -1, 1]
ans = -1
for i in range(n):
data = list(map(int, stdin.readline().split()))
arr.append(data)
for j in range(m):
if data[j] == 1:
shark.append((i, j))
def solve(x, y):
q = []
heapq.heappush(q, (0, x, y))
visited = set()
visited.add((x, y))
while q:
dist, x, y = heapq.heappop(q)
if arr[x][y] == 1:
return dist
for i in range(8):
nx, ny = dx[i] + x, dy[i] + y
if 0 <= nx < n and 0 <= ny < m:
if (nx, ny) not in visited:
heapq.heappush(q, (dist + 1, nx, ny))
visited.add((nx, ny))
for i in range(n):
for j in range(m):
if arr[i][j] == 0:
res = solve(i, j)
if res > ans:
ans = res
print(ans)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์ 1
5 4
0 0 1 0
0 0 0 0
1 0 0 0
0 0 0 0
0 0 0 1
์คํ๊ฒฐ๊ณผ 1
2
์์ 2
7 4
0 0 0 1
0 1 0 0
0 0 0 0
0 0 0 1
0 0 0 0
0 1 0 0
0 0 0 1
์คํ๊ฒฐ๊ณผ 2
2
โจ๏ธ ๋ฌธ์ ํ์ด
- ๋ฌธ์ ์์ ๋ณด๋ฉด, N๊ณผ M์ด ๊ฐ๊ฐ ์ต๋ 50์ด๊ธฐ ๋๋ฌธ์ ์ต๋ 50 * 50 ์ง๋ฆฌ 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ ์ ์๋ค.
- 1์ ์๊ธฐ ์์ด์ด๋ฉฐ, 0์ ์์ ํ ์นธ์ด๋ค. ์ด ๋ฌธ์ ์ ํต์ฌ์ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ธ๋ฐ, ์ฐ์ ์์ ํ๋ ๋ฌด์์ธ๊ฐ?
์ฐ์ ์์ ํ๋ ๋จผ์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ, ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ์์ ๊ฑฐ๋ฆฌ์ ๊ฐ์ ์ฐ์ ์์๋ก ๋์ด ํ์ ์ ์ฅํ๋ฉด์ 8 ๋ฐฉํฅ์ผ๋ก, ๋ฐฉ๋ฌธํ์ง ์์ ์นธ์ ํ์ ๋ฃ์ด์ค๋ค.
ํ์ด์ฌ์ heapq ์์๋ ์ต์ ํ(Min Heap)์ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์ต์ ํ์ ๋ฃจ๋ ๋
ธ๋๋ ๋ชจ๋ ๋
ธ๋๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค.
- ans ์ ๊ฐ์ -1๋ก ์ด๊ธฐํํ๊ณ , board๋ฅผ ํ์นธ์ฉ ์ํํ๋ฉด์ 0์ธ ๊ฒฝ์ฐ์ solve() ํจ์์ ์ขํ๊ฐ์ ๋๊ฒจ์ค๋ค.
solve() ํจ์์์๋ heapq ๋ฅผ ์ฌ์ฉํด BFS๋ฅผ ์ํํ๋ฉด์, 8 ๋ฐฉํฅ์ ํ์ํ๋ค.
์์ ๊ฑฐ๋ฆฌ๋ ์ด๋ค ์นธ์ ์์ ๊ฑฐ๋ฆฌ๋ ๊ทธ ์นธ๊ณผ ๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ์๊ธฐ ์์ด์์ ๊ฑฐ๋ฆฌ ์ด๋ค.
- (4)๋ฒ์ฒ๋ผ ํ์์ ํ๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ์๊ธฐ ์์ด์ ์นธ์ ํ์ํ ์ ์์ผ๋ฉฐ, ํ ํ์์ ๋ฝ์ ์ขํ์ ๊ฐ์ด ์๊ธฐ ์์ด์ผ ๊ฒฝ์ฐ, dist๋ฅผ ๋ฐํํ๋ค.
- ๋ฐํ๋ dist๋ฅผ ans์ ๋น๊ตํด ๋ ํฐ ๊ฐ์ผ๋ก ๊ฐฑ์ ํ ํ, board ๋ฅผ ๋ชจ๋ ์ํํ๋ค๋ฉด ans๋ฅผ ์ถ๋ ฅํ๋ค.
๐พ ๋ฐฐ์ด์
- BFS ์๊ณ ๋ฆฌ์ฆ์ Heapq๋ฅผ ์ฌ์ฉํด 8๋ฐฉํฅ์ผ๋ก ํ์ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ๊ฒ์ ๋ํด ์ข์ ๊ฒฝํ์ ์์ ์ ์๋ ๋ฌธ์ ์๋ ๊ฒ ๊ฐ๋ค.