[코딩테스트 cheatsheet] 다익스트라

2022. 12. 14. 19:24·ps, cp/코딩테스트 cheatsheet

개념

한 지점에서 다른 모든 지점까지의 최단거리를 구하는 알고리즘

현재 노드에서 가장 가까운 노드를 계속 탐색하며 최단거리를 그리디하게 업데이트해나감

힙을 사용하지 않으면 다음 노드를 선택하는 과정에서 연결된 노드를 모두 살펴야 함으로 비효율적

주의 : 가중치가 음일 경우 불가능함 => 벨만 포드 알고리즘을 사용해야함

 

시간복잡도 : O(ElogV) E : 간선의 개수, V : 노드의 개수 (힙 사용시)

 

코드

import heapq

# 입력값은 인접리스트 형식으로
graph = [[] for _ in range(n + 1)]

# 거리테이블을 무한으로 초기화
INF = int(1e9)
distance = [INF] * (n + 1)

# (거리, 노드)로 힙에 추가 -> 가장 가까운 거리를 바로 알 수 있음
start = 0
heap = []
heapq.heappush(heap, (0, start))

while heap:
    dist, now = heapq.heappop(heap)
    
    if distance[now] < dist:
    	continue
       
    for i in graph[now]:
        cost = dist + i[1]
        if distance[i[0]] > cost:
            distance[i[0]] = cost
            heapq.heappush(heap, (cost, i[0])
        
print(distance)

 

백준 티어별로 살펴보는 문제 유형

 

골드 5

5972 - 택배 배송 (https://www.acmicpc.net/problem/5972)

다익스트라를 알고 있다면 쉽게 풀리는 문제

 

골드 4

1504 - 특정한 최단 경로

 

골드 3

11779 - 최소비용 구하기 2 (https://www.acmicpc.net/problem/11779)

 

골드 2

2211 - 네트워크 복구 (https://www.acmicpc.net/problem/2211)

9370 - 미확인 도착지 (https://www.acmicpc.net/problem/9370)

 

골드 1 

1162 - 도로포장 (https://www.acmicpc.net/problem/1162)

1800 - 인터넷 설치 (https://www.acmicpc.net/problem/1800)

 

플래티넘 5

5719 - 거의 최단 경로 (https://www.acmicpc.net/problem/5719)

 

 

문제 접근법

'ps, cp > 코딩테스트 cheatsheet' 카테고리의 다른 글

[코딩테스트 cheatsheet] 서로소 집합 (Disjoint set)  (0) 2023.02.23
[코딩테스트 cheatsheet] 플로이드 워셜  (0) 2022.12.10
[코딩테스트 cheatsheet] 시작하기  (0) 2022.12.09
'ps, cp/코딩테스트 cheatsheet' 카테고리의 다른 글
  • [코딩테스트 cheatsheet] 서로소 집합 (Disjoint set)
  • [코딩테스트 cheatsheet] 플로이드 워셜
  • [코딩테스트 cheatsheet] 시작하기
uzzam
uzzam
  • uzzam
    uzzam.dev
    uzzam
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • blockchain (6)
        • geth 소스코드 분석 (4)
        • solidity (0)
      • blockchain (리서치) (1)
      • blockchain (투자) (2)
      • 프로젝트 - 뮤피 (0)
      • 프로젝트 - 담타 (9)
        • 소개 (1)
        • 프로젝트 관리하기 (4)
        • 리팩터링 (3)
        • etc. (1)
      • CS (0)
        • 운영체제 (0)
      • ps, cp (5)
        • 코딩테스트 cheatsheet (4)
        • baekjoon (1)
        • codeforces (0)
      • languages (2)
        • dart (1)
        • swift (1)
        • go (0)
      • frameworks (5)
        • flutter (5)
        • spring (0)
      • ios (2)
      • 블로그 (10)
      • git (2)
      • cloud (5)
      • etc. (6)
      • linux (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    geth
    이더리움
    geth 분석
    flutter
    블로그
    멀티디바이스
    디버깅
    go-ethereum
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
uzzam
[코딩테스트 cheatsheet] 다익스트라
상단으로

티스토리툴바