inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

다익스트라 알고리즘 질문

148

이승훈

작성한 질문수 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

16

1

replit에서 developer frameworks가 안보여요

0

21

2

연결리스트 삽입삭제 O(1) 아닌가요?

0

19

2

코딩 테스트 All-in-One(Java)' 강의 노션 교재 권한문의

0

23

1

태어난김에 세계일주 시간 초과

0

22

1

커리큘럼 중 정렬 관련 질문

0

21

1

코테 사이트 로그인 불가

0

29

1

실습 권한이 없네요··· 이건 ··· 좀··· 401 에러떠요

0

31

3

백준 사이트 서버종료

1

27

0

[할인쿠폰] 코테의 바이블[JAVA] 50% 할인 쿠폰 관련

0

26

1

수강평 이벤트

0

34

2

part8 Notion 링크

0

31

1

잠겨버린 사물함 시간초과 관련 질문입니다.

0

30

1

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

70

2

Climbing Stairs 문제 basecase 생각하는 방법

0

34

1

[업데이트] 파이썬 패키지 부분에서 안되어서 강의 진행 불가

2

71

3

itertools, sys같은 STL을 사용할 수 없는 경우 질문드립니다.(백준 11724)

1

42

1

DFS/BFS

1

44

2

3-3 정렬-2 선택정렬 로직

0

43

2

질문 디스코드 관련

0

48

1

링크드 리스트 끝에서 k번째 값 출력하기

0

46

2

LinkedList 과제 Fast, slow 포인터

0

50

2

섹션[6] 66.[출제유형] 거리측정, 최단거리 페이지 오타

0

42

2

투포인터 시간복잡도

0

53

2