Hiya_
๊ฐœ๋ฐœ์ž์ทจ๐ŸŒฑ
Hiya_
Github
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (155) N
    • ๐Ÿ’ปBackend (1) N
      • ๋ผ์ด์ง•์บ ํ”„ (6)
      • SSAFY | ์‹ธํ”ผ (2)
      • ์‹ ํ•œDS ๊ธˆ์œตSW ์•„์นด๋ฐ๋ฏธ (2)
    • ๐Ÿ“๋ฌธ์ œ ํ’€์ด (102)
      • ๐ŸงฉBaekjoon (47)
      • ๐ŸงฉProgrammers (42)
      • ๐ŸงฉSWExpertAcademy (10)
      • ๐ŸงฉSofteer (3)
    • ๐Ÿ“‚Language (31)
      • Python (3)
      • JAVA (2)
      • SQL (6)
      • English (19)
    • โœจUseful information (5)
    • ๐Ÿ”‘Algorithms (3)
    • ๐Ÿ™Git (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์ •๋ ฌ
  • ๋ฐฑ์ค€
  • ๊ตฌํ˜„
  • UNION ALL
  • ๊ทธ๋ฆฌ๋””
  • ์˜ค๋ธ”์™„
  • sort
  • ํ•ด์ปค์Šคํ† ์ต
  • mysql
  • ์™„์ „ํƒ์ƒ‰
  • ๋‚ด์žฅํ•จ์ˆ˜
  • BFS
  • ํ† ์ตRC
  • ํ† ์ต๋…ํ•™
  • BaekJoon
  • ์ฝ”ํ…Œ
  • ํ† ์ต๋ฌด๋ฃŒ๊ฐ•์˜
  • ํ† ์ต๊ณต๋ถ€
  • ํ•ด์ปค์ŠคํŒŒ๋žญ์ด
  • ํ† ์ต์‹œํ—˜
  • Python
  • greedy algorithm
  • ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
  • ํ† ์ต์ ์ˆ˜
  • ํ† ์ต๊ธฐ์ถœ
  • ํ† ์ต๋ฌด๋ฃŒ์ž๋ฃŒ
  • ๋‹ค์ต์ŠคํŠธ๋ผ
  • 2์ฐจ์› ๋ฐฐ์—ด
  • ๋ฆฌ์ŠคํŠธ
  • Union

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ


Owner : ๊น€์‹ ์˜
Naver Blog

hELLO ยท Designed By ์ •์ƒ์šฐ.
Hiya_

๊ฐœ๋ฐœ์ž์ทจ๐ŸŒฑ

๐Ÿ”‘Algorithms

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ | ๋‹ค์ต์ŠคํŠธ๋ผ | ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ

2023. 5. 17. 13:42

 

 

~๋ชฉ์ฐจ~

์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ”Œ๋กœ์ด๋“œ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜


 

์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ

์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋Š” ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ๋กœ ์šฐํ…Œ์บ  6๊ธฐ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—๋„ ๋‚˜์™”์—ˆ๋‹ค

์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra, ๋ฐ์ดํฌ์ŠคํŠธ๋ผ) ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค

 

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ง„ํ–‰๋œ๋‹ค

๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋ฉด ๋ฌดํ•œ์ˆ˜(int(1e9) in Python)๋กœ ํ‘œ์‹œํ•œ๋‹ค.

 

 

 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์‹œ์ž‘ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ ๋…ธ๋“œ๊นŒ์ง€ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ๋ฆฌ์ŠคํŠธ(๋ฐฐ์—ด)์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‰ฝ์ง€๋งŒ ์‹œ๊ฐ„ ๋ณต์žก๋„์—์„œ ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚˜๋ฏ€๋กœ

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ์— ์ต์ˆ™ํ•ด์ง€๋„๋ก ํ•˜์ž!

 

 

1. ๋ฆฌ์ŠคํŠธ(๋ฐฐ์—ด) ์‚ฌ์šฉ

O(V2) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.(V : ๋…ธ๋“œ ์ˆ˜)

 

ํ•ด๋‹น ๊ธ€์—์„œ๋Š” ์šฐ์„ ์ˆœ์œ„ ํ์˜ ํ’€์ด ๋ฐฉ๋ฒ•๋งŒ์„ ๋‹ค๋ฃฌ๋‹ค

 

 

2. ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ

O(ElogV)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ( E : ๊ฐ„์„  ์ˆ˜, V : ๋…ธ๋“œ ์ˆ˜)

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ Python์˜ heapq ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•จ

 

1) ๊ฐ ๊ทธ๋ž˜ํ”„์˜ ์ธ์ ‘ ํ–‰๋ ฌ์ด๋‚˜ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ์ฃผ์–ด์ง„ ์ •๋ณด์— ๋”ฐ๋ผ ์ƒ์„ฑํ•œ๋‹ค.

2) ์‹œ์ž‘ ๋…ธ๋“œ๋กœ ๋ถ€ํ„ฐ ๊ฐ ๋…ธ๋“œ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•  1์ฐจ์› ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ๋ฌดํ•œ์ˆ˜๋กœ ์ดˆ๊ธฐํ™” (2์ฐจ์› ๋ฐฐ์—ด๋กœ ํ™•์žฅ๋˜๊ธฐ๋„ ํ•จ)

3) ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์‹œ์ž‘ ๋…ธ๋“œ์™€ ๊ฑฐ๋ฆฌ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

3) ํ์— ๊ฐ’์ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๊ฑฐ๋ฆฌ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ๋‹ค.

4) ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์ตœ์†Œ ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋œ ์ ์ด ์—†๋‹ค๋ฉด(์ด๋ฏธ ์ €์žฅ๋œ ๊ฑฐ๋ฆฌ ์ •๋ณด๋ณด๋‹ค ํ˜„์žฌ ๊ฑฐ๋ฆฌ๊ฐ€ ์ž‘๋‹ค๋ฉด) ๊ฑฐ๋ฆฌ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ

 

import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)

n, m = map(int, input().split())
start = int(input())
graph = [[] for _ in range(n+1)]
distance = [INF] * (n+1)

for _ in range(m):
    v1, v2, d = map(int, input().split())
    graph[v1].append((v2, d))

def dijkstra(start):
    q = []
    heapq.heappush(q, (0, start))  # ์šฐ์„ ์ˆœ์œ„ ํ, q์— (๊ฑฐ๋ฆฌ, ์‹œ์ž‘ ๋…ธ๋“œ) ์‚ฝ์ž…
    distance[start] = 0
    while q:
        dist, now = q.heappop(q)
        if distance[now] < dist:
            continue
        for i in graph[now]:
            cost = dist + i[1]
            if cost < distance[i[0]]:
                distance[i[0]] = cost
                heapq.heappush(q, (cost, i[0]))

dijkstra(start)

for i in range(1, n+1):
    if distance[i] == INF:
        print("INFINITY")
    else:
        print(distance[i])
        
        
# ์ž…๋ ฅ ์˜ˆ์‹œ
6 11
1
1 2 2
1 3 5
1 4 1
2 3 3
2 4 2
3 2 3
3 6 5
4 3 3
4 5 1
5 3 1
5 6 2
# ์ถœ๋ ฅ ์˜ˆ์‹œ
0
2
3
1
2
4

 

 

 

๋ฌธ์ œ ํ’€์ด ๋ชจ์Œ

2023.05.16 - [๐Ÿ“๋ฌธ์ œ ํ’€์ด/๐ŸงฉBaekjoon] - [Python] ๋ฐฑ์ค€ 1753 ์ตœ๋‹จ ๊ฒฝ๋กœ | ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

2023.05.16 - [๐Ÿ“๋ฌธ์ œ ํ’€์ด/๐ŸงฉBaekjoon] - [Python] ๋ฐฑ์ค€ 18352 ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ | ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

2023.05.16 - [๐Ÿ“๋ฌธ์ œ ํ’€์ด/๐ŸงฉProgrammers] - [Python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ | BFS | ๋‹ค์ต์ŠคํŠธ๋ผ

 

 

 

 

ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค์ต์ŠคํŠธ๋ผ์™€ ๋น„๊ตํ•˜์—ฌ ์ ํ™”์‹ ํ•˜๋‚˜๋งŒ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ๋‹ค๋ฅธ ์ ์€ ์‹œ์ž‘ ๋…ธ๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๊นŒ์ง€ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ํฌ์ธํŠธ๋Š” a -> b ๊ฒฝ๋กœ์™€ a -> k -> b ๊ฒฝ๋กœ ์ค‘ ๋” ์ž‘์€ ๊ฐ’ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๋…ธ๋“œ ๋ณ„ ๊ฐ€์žฅ ์ž‘์€ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค

2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ฐ ๋…ธ๋“œ ๊ฑฐ๋ฆฌ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค

 

k๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด NํšŒ, a๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด NํšŒ, b๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด NํšŒ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ 3์ค‘ for๋ฌธ์ด ์ž‘์„ฑ๋˜๊ณ 

์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N3)๊ฐ€ ๋œ๋‹ค

 

ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ธฐ์–ตํ•  ์ ํ™”์‹์€

Dab = min( Dab ,  Dak + Dkb)

 

INF = int(1e9)

n = int(input())  # ๋…ธ๋“œ
m = int(input())  # ๊ฐ„์„ 
graph = [[INF] * (n+1) for _ in range(n+1)]

for a in range(1, n+1):
    for b in range(1, n+1):
        if a == b:
            graph[a][b] = 0

for _ in range(m):
    a, b, c = map(int, input().split())
    graph[a][b] = c

for k in range(1, n+1):
    for a in range(1, n+1):
        for b in range(1, n+1):
            graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])

for a in range(1, n+1):
    for b in range(1, n+1):
        if graph[a][b] == INF:
            print("INFINITY", end=" ")
        else:
            print(graph[a][b], end=" ")
    print()
    
    
# ์ž…๋ ฅ ์˜ˆ์‹œ
4
7
1 2 4
1 4 6
2 1 3
2 3 7
3 1 5
3 4 4
4 3 2
# ์ถœ๋ ฅ ์˜ˆ์‹œ
0 4 8 6
3 0 7 9
5 9 0 4
7 11 2 0

 

 

 

ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ๋ฌธ์ œ ํ’€์ด ๋ชจ์Œ

2023.05.16 - [๐Ÿ“๋ฌธ์ œ ํ’€์ด/๐ŸงฉBaekjoon] - [Python] ๋ฐฑ์ค€ 11404 ํ”Œ๋กœ์ด๋“œ | ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ

 

 

 

 

 

๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ์ข‹์•„์š” ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”๐Ÿ’š

๐Ÿ’ก ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์„ธ์š”!

 

'๐Ÿ”‘Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ | ํฌ๋ฃจ์Šค์นผ/ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜  (0) 2023.05.29
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์‹œ๊ฐ„๋ณต์žก๋„ ๊ตฌํ•˜๊ธฐ  (0) 2023.04.04
    '๐Ÿ”‘Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ | ํฌ๋ฃจ์Šค์นผ/ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • [์•Œ๊ณ ๋ฆฌ์ฆ˜] ์‹œ๊ฐ„๋ณต์žก๋„ ๊ตฌํ•˜๊ธฐ
    Hiya_
    Hiya_
    ํ•˜์–€ ์ฒœ๊ณผ ๋ฐ”๋žŒ๋งŒ ์žˆ๋‹ค๋ฉด ์–ด๋””๋“  ๊ฐˆ ์ˆ˜ ์žˆ์–ด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”