[BOJ] Q4485 녹색 옷 입은 애가 젤다지?

Question

Language: Python

Difficulty: Gold 4

해당 문제는 출발지로부터 목적지까지 잇는 가장 짧은 경로를 구하는 SSSP 유형의 문제이다. 다른 graph와 달리 2차원 좌표평면 상에서 동작하는 SSSP 문제로 dijkstra + 2-level array을 활용해서 풀이를 진행한다.

Solution

from heapq import heappush,heappop
from math import inf

def solution():
    count=0
    heap=[(graph[0][0],0,0)]
    distances[0][0]=graph[0][0]

    while heap:
        cost,row,col=heappop(heap)

        if cost > distances[row][col]:
            continue

        for dir in range(4):
            next_row=row+dy[dir]
            next_col=col+dx[dir]

            if next_row < 0 or next_row>=n or next_col < 0 or next_col>=n:
                continue

            new_distance=cost+graph[next_row][next_col]

            if new_distance < distances[next_row][next_col]:
                distances[next_row][next_col]=new_distance
                heappush(heap,(new_distance,next_row,next_col))
    
    return distances[n-1][n-1]

if __name__ == "__main__":
    dy=[-1,0,1,0]
    dx=[0,1,0,-1]
    index=0
    while True:
        n=int(input())

        #n==0 이면 반복을 종료한다. 
        if n==0:
            break
        index+=1       
        graph=[list(map(int, input().split())) for _ in range(n)]
        distances=[[inf] * n for _ in range(n)]
        print(f"Problem {index}: {solution()}")



댓글남기기