알고리즘 문제풀이

엔터프라이즈호 탈출(백준9505)

wiojfe 2023. 8. 26. 18:23

그래프에서 길을 찾아 나서는데 heapq를 이용해서 경로들의 값을 저장하고 큐에서 꺼낼 때마다 확인한다. 

import heapq 
import sys
input = sys.stdin.readline
testcase = int(input())
inf = int(1e9)
dx =[1,-1,0,0]
dy = [0,0,1,-1]

for _ in range(testcase):
    k,w,h = map(int, input().split())
    ships ={}
    ships['E'] = 0 
    gra = []
    sx,sy =0,0 
    dist = [[inf for _ in range(w)]for _ in range(h)]
    for i in range(k):
        a,b = map(str, input().split())
        b =int(b)
        ships[a] = b 
    for i in range(h):
        oneline = str(input().rstrip())
        gra.append(oneline)
        for j in range(len(oneline)):
            if oneline[j] =='E':
                sx,sy= i,j 
                dist[i][j] =  0 
                
    q = []
    q.append((0,sx,sy))
    heapq.heapify(q)
    while q :
        wei, x,y = heapq.heappop(q)
        if x ==0 or y==0 or x== h-1 or y== w-1:
            print(wei)
            break  
        if dist[x][y] < wei :
            continue 
        
        for i in range(4):
            nx,ny = x+dx[i],y+dy[i] 
            if (0<=nx<h and 0<=ny< w):
                if dist[nx][ny]  > wei + ships[gra[nx][ny]]:
                    dist[nx][ny] = wei + ships[gra[nx][ny]]
                    heapq.heappush(q, (dist[nx][ny],nx,ny))