다익스트라 알고리즘 질문
152
작성한 질문수 17
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
Replit 강의 자료가 안나와요
0
9
1
Replit UI 변경으로 인한 실습 진행 문의
1
24
1
코딩 문제 사이트 접속 오류
0
28
1
강의노트 접속 불가
0
30
2
노션 링크 문의
0
61
2
문제 풀이 접속 오류
0
63
2
coders 사이트 로그인이 안돼요
0
49
2
노션 접근권
0
47
1
재귀 관련
0
50
1
replit에서 developer frameworks가 안보여요
0
87
2
연결리스트 삽입삭제 O(1) 아닌가요?
0
40
2
코딩 테스트 All-in-One(Java)' 강의 노션 교재 권한문의
0
49
1
태어난김에 세계일주 시간 초과
0
44
1
커리큘럼 중 정렬 관련 질문
0
33
1
코테 사이트 로그인 불가
0
47
1
실습 권한이 없네요··· 이건 ··· 좀··· 401 에러떠요
0
56
3
백준 사이트 서버종료
1
45
0
[할인쿠폰] 코테의 바이블[JAVA] 50% 할인 쿠폰 관련
0
36
1
수강평 이벤트
0
62
2
part8 Notion 링크
0
36
1
잠겨버린 사물함 시간초과 관련 질문입니다.
0
37
1
코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요
0
116
2
Climbing Stairs 문제 basecase 생각하는 방법
0
40
1
[업데이트] 파이썬 패키지 부분에서 안되어서 강의 진행 불가
2
111
3





