[Python][프로그래머스][Level3] 배달

[Python][프로그래머스][Level3] 배달

코드

import queue
def solution(N, road, K):
    length=[1000000]*(N+1)
    length[1]=0
    road_dict=dict()
    for start,end,leng in road:
        if start in road_dict:
            road_dict[start].append([end,leng])
        else:
            road_dict[start]=[[end,leng]]
        if end in road_dict:
            road_dict[end].append([start,leng])
        else:
            road_dict[end]=[[start,leng]]
    q=queue.Queue()
    q.put(1)
    while q.qsize():
        start=q.get()
        for end,cost in road_dict[start]:
            if length[end]>length[start]+cost:
                length[end]=length[start]+cost
                q.put(end)
    
    answer=0
    for i in length[1:]:
        if i <=K:
            answer+=1
    return answer

각 마을에 도달하는 최단 거리를 구해서 배달가능 여부를 구하는 문제이다.

그래프로 배열을 많이 사용하지만 딕셔너리로 구현했다.

road_dict의 key는 시작점이고 value는 [도착점, 거리]로 이루어진 배열이다.

이렇게 road_dict를 구성하고

queue를 활용해 bfs를 했다.

Discussion and feedback