프로그래머스 / 경주로 건설 / python

맹민재·2023년 7월 6일
0

알고리즘

목록 보기
128/134
from heapq import heappop, heappush

direction = [[1,0], [-1,0], [0,1], [0,-1]]

def solution(board):
    n= len(board)
    visited = [[0] * n for _ in range(n)]
    h = [(0, [0,0], [0,0])]
    
    while h:
        cost, now, past = heappop(h)
        x, y = now[0], now[1]
        p_x, p_y = past[0], past[1]
        
        if x == n-1 and y == n-1:
            return cost * 100
        
        visited[x][y] = cost
        
        for d in direction:
            n_x, n_y = x+d[0], y+d[1]
            if 0 <= n_x < n and 0 <= n_y < n:
                if not visited[n_x][n_y] and board[n_x][n_y] == 0:
                    if n_x != p_x and n_y != p_y:
                        heappush(h, (cost+6, [n_x,n_y], [x,y]))
                    else:
                        heappush(h, (cost+1, [n_x,n_y], [x,y]))
                        
    return answer

다익스트라 알고리즘으로 푼 문제
일반적인 bfs로 풀라면 풀 수 있겠지만 bfs로 해결 할 시 최소값을 저장하고 있을 dp가 따로 필요하다. 그렇기 때문에

다익스트라 알고리즘으로 최소 값에 대해서 우선 계산할 수 있게 끔 해준다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글