이번 문제는 다익스트라 알고리즘을 통해 쉽게 해결하였다. 기존의 다익스트라 알고리즘 문제와 똑같이 작성을 하고, 힙에 넣을 다음 탐색 구역이 1일 경우에는 비용을 1 증가시켜주고, 그 외에는 비용을 그대로 유지한 상태로 진행시킨다. 이렇게 하면 목적지의 최소 비용을 구할 수 있게 된다.
sys.maxsize
로 선언한다.dist[0][0]
을 0으로 갱신한다.(0, 0, 0)
을 넣는다. (비용, y좌표, x좌표)dist[y][x]
보다 클 경우, 다음 반복으로 넘어간다.y+dy[i]
를 저장한다.x+dx[i]
를 저장한다.maze[ny][nx]
가 '1'일 경우, nxt_cost를 cost+1
로 선언한다.dist[ny][nx]
가 nxt_cost보다 클 경우,dist[ny][nx]
를 nxt_cost로 갱신한다.(nxt_cost, ny, nx)
를 넣는다.dist[m-1][n-1]
을 출력한다.import heapq
import sys
n, m=map(int, input().split())
maze=[]
for _ in range(m):
maze.append(str(input()))
dy=[0, 0, -1, 1]
dx=[1, -1, 0, 0]
INF=sys.maxsize
dist=[[INF]*n for _ in range(m)]
dist[0][0]=0
q=[]
heapq.heappush(q, (0, 0, 0))
while q:
cost, y, x=heapq.heappop(q)
if cost>dist[y][x]:
continue
for i in range(4):
ny=y+dy[i]
nx=x+dx[i]
if 0<=ny<m and 0<=nx<n:
if maze[ny][nx]=='1':
nxt_cost=cost+1
else:
nxt_cost=cost
if dist[ny][nx]>nxt_cost:
dist[ny][nx]=nxt_cost
heapq.heappush(q, (nxt_cost, ny, nx))
print(dist[m-1][n-1])