inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

다익스트라 알고리즘 질문

161

이승훈

작성한 질문수 17

0

import heapq



def solution(N, road, K):

    n_road = [500001] * (N+1)

    n_road[1] = 0

    sorted_road = [[] for i in range(N+1)]

    for road_num in road:

        sorted_road[road_num[0]].append([road_num[2], road_num[1]])

        sorted_road[road_num[1]].append([road_num[2], road_num[0]])

    # print(sorted_road)

    

    q = []

    heapq.heappush(q, [0, 1])

    while q:

        cur_node = q.pop()

        for dist, b in sorted_road[cur_node[1]]:

            if dist + n_road[cur_node[1]] < n_road[b]:     # 1에서 cur로, cur에서 b로, 1에서 b로

                n_road[b] = dist + n_road[cur_node[1]]

                q.append([n_road[b], b])

    return len(list(filter(lambda x: x <=K, n_road)))

다익스트라 알고리즘을 구현하는데 의문점이 생겨서 여기 질문을 남깁니다.

1. 다익스트라 알고리즘에서 인접한 거리의 노드를 선택하기 위해서 heap 자료구조를 사용하는데 꼭 인접한 거리의 노드를 선택해야할 이유가 있을까요? 제가 원래 heap을 사용했던 python 코드를 단순히 배열로 바꿔서 가장 인접한 거리의 노드부터 선택하지 않음에도 불구하고 작동이 잘 되어서 질문을 남깁니다.

- 제가 구현한 코드에서는 인접한 거리를 방문하든 안하든 결국 모든 노드들을 방문하여서 차이가 없다고 생각되었습니다.

2. 위와 같은 방법의 시간 복잡도는 어떻게 되는것인가요? 아직 시간복잡도 계산이 미숙해서 그런지 잘 모르겠습니다.

알고리즘 다익스트라 시간복잡도

답변 0

수정 자료 요청

0

35

1

runpod에서 실습하는 내용이 조금 다릅니다.

0

36

1

Queue

0

55

1

코테의 바이블 수강생 코테올인원 JAVA 쿠폰

0

50

1

2. 배열과 리스트. 22:30 오타

0

49

0

블로그 내용 정리

0

74

2

선택정렬 이해하기 & 구현하기

0

64

1

링크드 리스트 중간 삽입삭제 시간복잡도 질문

0

105

2

재귀함수 종료조건

0

103

2

백준 서비스 종료로 인한 강의 자료 업데이트 요청드립니다.

0

83

1

백준 사이트 준비중이라 문제를 볼 수 가 없어요

0

149

2

해당 차수 영상이 짤려 나갑니다

0

106

2

주피터 설치되어있는지 어디서 확인해요 도대체

0

123

4

pandas 설치 안되요 짜증나요

0

138

3

명령프롬포트에 파이썬 설치 안되요

0

114

3

윈도우에서 VScode 사용 시 질문입니다.

0

74

2

백준 서비스 종료인데 조치 없나요?

0

110

1

1-11 소수 나열하기 (에라토스테네스의 체)

0

101

1

첨부파일이 열리지 않습니다.. .pdf.json 파일로 받아지네요ㅠ

0

97

2

코테사이트 오류 해결 문의

0

110

1

무료행사(2) 투포인터 코드 질문 드립니다.

0

86

1

실습 권한 부탁드립니다.

0

77

2

Replit 강의 자료가 안나와요

0

98

3

Replit UI 변경으로 인한 실습 진행 문의

1

88

1