๋ฐ์ํ
๐ค๋ฌธ์ ํด๊ฒฐ
-
G4 | ๋ค์ต์คํธ๋ผ(BFS๋ ๊ฐ๋ฅ)
๋ค์ต์คํธ๋ผ ์ ํ์ผ๋ก ๋์ด์์ง๋ง BFS๋ ๊ฐ๋ฅํ๊ฑฐ ๊ฐ๋ค.
BFS๋ก ํ ๋ฉด ๊ธธ์ ์ฐพ์ ๊ฐ ๋ 0์ด๋ฉด ๊ทธ๋ฅ ๊ฐ๊ณ 1์ด๋ฉด +1ํด์ ๊ฐ๋ฉด ๋๋ค.
์ด ๋ฌธ์ ๋ ๋ค์ต์คํธ๋ผ๋ก ํ์ด๋ดค๋ค.
( ๋ค์ต์คํธ๋ผ์ ์ฐ์ ์์ํ(ํํ)๋ ์ง๊ฟ )
- ์ฃผ์ด์ง ๋ฏธ๋ก์ ๊ฐ์ ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ ๋ค. ( ๊ฐ์ค์น๋ฅผ ์ ๋ฐ์ดํธ ํด์ค ๋ฐฐ์ด )
- 0,0 ๋ถํฐ ์ฃผ๋ณ์ ํ์ํ๋ฉฐ ๋ฐฉ(0)์ด๋ฉด ๋น์ฉ์ ํ์ฌ๋น์ฉ์ผ๋ก ๋ฃ๊ณ , ๋ฒฝ(1)์ด๋ฉด ๋น์ฉ์ ํ์ฌ๋น์ฉ +1ํด์ ์ ๋ฐ์ดํธ ํด์ค๋ค.
- ์ ๋ฐ์ดํธ๊ฐ ๋ ์ง์ ์๋ค ํํ์ ๋ฃ๊ณ ๋ชฉ์ ์ง๊ฐ ๋์ฌ ๋ ๊น์ง ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
๐ป์์ค ์ฝ๋
import heapq
if __name__ == '__main__':
N, M = map(int, input().split()) # ๋ฌธ์ ๋ 1๋ถํฐ ์์์ด๋ฏ๋ก -1 ํด์ค
room = [list(map(int, input())) for _ in range(M)]
# ๊ฐ์ค์น 2์ฐจ์ ๋ฐฐ์ด
key = [[float('inf')] * N for _ in range(M)]
pq = []
heapq.heappush(pq, (0, 0, 0))
key[0][0] = 0
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
while pq:
cost, x, y = heapq.heappop(pq)
if x == M - 1 and y == N - 1:
print(key[x][y])
break
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < M and 0 <= ny < N:
# ๋ค์ ๊ฐ ๊ณณ์ด ๋ฒฝ์ด๊ณ , ํ์ฌ ๊ฐ๋ ๋ฃจํธ์ ๋น์ฉ์ด ๋ ์๋ค๋ฉด ๊ณ
if room[nx][ny] == 1 and cost + 1 < key[nx][ny]:
heapq.heappush(pq, (cost + 1, nx, ny))
key[nx][ny] = cost + 1
# ๋ค์ ๊ฐ ๊ณณ์ด ๋ฃธ์ด๊ณ , ํ์ฌ ๊ฐ๋ ๋ฃจํธ์ ๋น์ฉ์ด ๋ ์๋ค๋ฉด ๊ณ
elif room[nx][ny] == 0 and cost < key[nx][ny]:
heapq.heappush(pq, (cost, nx, ny))
key[nx][ny] = cost
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋ฐ์ํ
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค - 15685. ๋๋๊ณค ์ปค๋ธ (์ผ์ฑ SW ์ญ๋ ํ ์คํธ ๊ธฐ์ถ ๋ฌธ์ ) (0) | 2020.11.17 |
---|---|
[python] ๋ฐฑ์ค - 14500. ํ ํธ๋ก๋ฏธ๋ ธ (์ผ์ฑ SW ์ญ๋ ํ ์คํธ ๊ธฐ์ถ ๋ฌธ์ ) (0) | 2020.11.16 |
[python] ๋ฐฑ์ค - 14889. ์คํํธ์ ๋งํฌ (0) | 2020.11.14 |
[python] SWEA - 10726. ์ด์ง์ ํํ (2) | 2020.11.13 |
[python] ๋ฐฑ์ค - 14501. ํด์ฌ (0) | 2020.11.11 |