Algorithm Problem/Python
[python] ๋ฐฑ์ค - 1261. ์๊ณ ์คํ
deo2kim
2020. 11. 15. 00:44
๋ฐ์ํ
๐ค๋ฌธ์ ํด๊ฒฐ
-
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
๋งํฌ: https://www.acmicpc.net/problem/1261
1261๋ฒ: ์๊ณ ์คํ
์ฒซ์งธ ์ค์ ๋ฏธ๋ก์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๊ฐ๋ก ํฌ๊ธฐ M, ์ธ๋ก ํฌ๊ธฐ N (1 ≤ N, M ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ๋ฏธ๋ก์ ์ํ๋ฅผ ๋ํ๋ด๋ ์ซ์ 0๊ณผ 1์ด ์ฃผ์ด์ง๋ค. 0์ ๋น ๋ฐฉ์ ์๋ฏธํ๊ณ , 1์ ๋ฒฝ์ ์๋ฏธ
www.acmicpc.net
๋ฐ์ํ