티스토리 뷰
학습 페이지
www.inflearn.com
문제 : https://leetcode.com/problems/network-delay-time/
# 접근 방법
목적지와 도착지가 있고 가는데 필요한 비용이 주어져있으므로 가중치 그래프를 활용한 문제인 것과 다익스트라 알고리즘을 적용해야 겠다는 생각이 들어야 한다.
다익스트라
모든 노드를 돌았을 때 최소 값을 출력 -> 최소 비용 중 가장 높은 것 출력(Output) 해야 한다.
# 코드 설계
- 그래프 구현
- 다익스트라 알고리즘
- 방문 못한 노드 찾기
- 최소값 중 최대값 찾기
이 순서로 코드 구현을 한다.
코드 구현 전, 실행 시간 초과 되는지 검증해보기
# 시간 복잡도 계산
- 그래프 구현
times 의 길이만큼 6000이하 이니 생략 무방
-다익스트라 알고리즘
edge 의 갯수만큼 push, pop (O(logn)) 발생 = O(ElognE) E = 는 edge의 갯수
결국 6000xlog6000 = 약 13
- 방문 못한 노드 찾기
O(n)
- 최소값중에서 최대값 구하기
O(n)
대략 계산한 결과 시간복잡도상 이상이 없을 것을 확인하였다.
# 코드 구현
import heapq
# inputtimes = [
[2,1,2],
[2,3,5],
[2,4,1],
[4,3,3]
]
n = 4
k = 2
# 그래프 구현
def networkDelayTime(times, n, k):
graph = defaultdict(list) # 딕셔너리 선언, 가중치 그래프 구현
for time in times: # 그래프 채워 나가기
graph[time[0]].append((time[2], time[1]))
costs = {}
pq = []
heapq.heappush(pq,(0,k))
while pq:
cur_cost, cur_node = heapq.heappop(pq)
if cur_node not in costs: # heap 특성 때문에 처음 방문하는 node가 아니면 최소비용이 아니다.
costs[cur_node] = cur_cost
for cost, next_node in graph[cur_node]:
next_cost = cur_cost + cost
heapq.heappush(pq, (next_cost, next_node)) # heap으로 인해 가장 높은 우선순위순으로 자동 정렬
가중치 그래프를 구현하는 코드를 작성 후
이전에 배웠던 다익스트라 알고리즘 템플릿을 그대로 작성하였다.
이 코드를 이제 문제에 맞게 변형 해보자
1. 방문 못한 노드가 있는 지 판별하는 for문 추가
for node in range(1, n+1):
if node not in costs:
return -1
2. return 시 최대값을 찾는 코드 추가
return max(costs.values())
모든 비용들 중에 가장 큰 값 리턴
'파이썬 > 다익스트라' 카테고리의 다른 글
특정한 최단거리 (골드 4) (0) | 2023.10.30 |
---|---|
최단 경로 함수 풀이 (골드4) (1) | 2023.10.27 |
백준 최단경로 (골드4) (0) | 2023.10.26 |
다익스트라 Dijkstra (0) | 2023.10.26 |
Heap 힙 개요 (0) | 2023.10.24 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 함수
- 힙
- 파이썬
- 다익스트라
- 가중치 그래프
- 재귀
- JSON
- dp
- 알고리즘
- 그래프
- 변수
- 시뮬레이션
- 골드5
- BFS
- C++
- dfs
- Bottom-up
- os모듈
- deque
- javascript
- 브루트포스
- 그래프 탐색
- 그래프 순회
- 완전탐색
- 파일 내용 찾기 프로그램
- 덱
- 메모리
- 프로젝트
- 백준
- 자료구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함