반응형
포인트
- 미로를 만드는 만드는 방법? 벽을 몇개를 부수고 들어가야 하는 가? 를 묻는 문제 입니다. 저는 이를 다익스트라 알고리즘 (이진 힙) 을 적용하여 해결하였습니다.
- 다익스트라 알고리즘은 시간 복잡도 O(E + VlogV) 가집니다.
🧶문서는 항상 수정될 수 있습니다. 비판은 환영합니다.
python
import heapq
n = int(input())
data = [list(input()) for _ in range(n)]
q = []
distance = [[987654321] * n for _ in range(n)]
distance[0][0] = 0
q.append((0, 0, 0))
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
while q:
cost, x, y = heapq.heappop(q)
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if not (0 <= nx < n and 0 <= ny < n):
continue
if data[nx][ny] == '1' and distance[nx][ny] > cost:
distance[nx][ny] = distance[x][y]
q.append((distance[nx][ny], nx, ny))
if data[nx][ny] == '0' and distance[nx][ny] > cost + 1:
distance[nx][ny] = distance[x][y] + 1
heapq.heappush(q, (distance[nx][ny], nx, ny))
print(distance[n - 1][n - 1])
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] Arrays: Left Rotation (0) | 2021.07.05 |
---|---|
[알고리즘] Candy (0) | 2021.06.27 |
[알고리즘] 암호 만들기 (0) | 2021.06.10 |
[알고리즘] Max Area of Island (0) | 2021.06.01 |
[알고리즘] 코딩 테스트를 위해 알아야 하는 문제들 (0) | 2021.05.17 |
댓글