Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

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

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

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

Amenable's Blog

๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜
๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ตœ๋‹จ ๊ฒฝ๋กœ

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

2023. 3. 4. 13:03

1. ๊ธฐ๋ณธ ๊ฐœ๋… ๐Ÿ„

1. ์ตœ๋‹จ ๊ฒฝ๋กœ

  ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์—์„œ ๋‘ ์ •์  ์‚ฌ์ด์˜ ๊ฒฝ๋กœ๋“ค ์ค‘์—์„œ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ๋กœ

2. ๋Œ€ํ‘œ์ ์ธ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ๋ฒจ๋งŒํฌ๋“œ(Bellman-Ford) ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ(Floyd-Warshall)
์ •์˜ ์ถœ๋ฐœ ์ •์ ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ถœ๋ฐœ ์ •์ ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชจ๋“  ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
ํŠน์ง• ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ—ˆ์šฉ X ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ—ˆ์šฉ O ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ—ˆ์šฉ O
์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ DP ์•Œ๊ณ ๋ฆฌ์ฆ˜
์‹œ๊ฐ„๋ณต์žก๋„ O(V ^ 2) ๋˜๋Š” O(E log V) O(V ^ 2) ๋˜๋Š” O(E log V) O(V ^ 3)

 

2. ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿฅ•

1. ๊ฐœ๋…

  ์ถœ๋ฐœ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

(๋งŒ์•ฝ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์•„๋‹Œ ํŠน์ • ์ •์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ํ•ด๋‹น ์ •์ ์„ ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ ๋น ์ ธ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Œ - ๊ทธ๋ฆฌ๋”” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์— ๊ธฐ๋ฐ˜ํ•œ ๊ตฌํ˜„)

2. ๋™์ž‘ ๋ฐฉ์‹

[ํ•œ ์ค„ ์ •๋ฆฌ]

  ์•„์ง๊นŒ์ง€ ์„ ํƒ๋˜์ง€ ์•Š์€ ์ •์ ๋“ค ์ค‘์—์„œ, ์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๊ฒƒ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ!

[๊ตฌ์ฒด์  ๋ฐฉ์‹]

  1. ์ถœ๋ฐœ ์ •์ ์„ ์„ ํƒํ•œ๋‹ค.
  2. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. 
    ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ฌดํ•œ๋Œ€๋กœ ์ง€์ •
  3. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ๋“ค ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์ •์ ์— ๋ฐฉ๋ฌธํ•œ๋‹ค.
  4. ํ•ด๋‹น ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์ •์ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
    ๋” ์งง์€ ๊ฑฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์—…๋ฐ์ดํŠธํ•จ.
  5. 3๋ฒˆ๊ณผ 4๋ฒˆ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

3. PRIM ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ฐจ์ด์ 

  PRIM ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ '๋‹ค์Œ์— ๋ฐฉ๋ฌธํ•  ์ •์ ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹'์ด๋‹ค.

  • PRIM ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ด์ „์— ๋ฐฉ๋ฌธํ•œ ์ •์ ์—์„œ๋ถ€ํ„ฐ ๊ฐ€์žฅ ์งง์€ ๊ฑฐ๋ฆฌ์˜ ์ •์ ์„ ๋ฐฉ๋ฌธํ•จ
  • ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ ์•„์ง ๋ฐฉ๋ฌธํ•œ ์ง€ ์•Š์€ ์ •์ ๋“ค ์ค‘ ์ตœ๋‹จ๊ฑฐ๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ์ •์ ์„ ๋ฐฉ๋ฌธํ•จ.

 

3. ์˜ˆ์‹œ๋ฅผ ํ†ตํ•œ ๋™์ž‘์ดํ•ด ๐Ÿ†

  ์œ„์™€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

  ์šฐ์„ , ์ถœ๋ฐœ ์ •์ ์„ ์„ ํƒํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” 1๋ฒˆ์„ ์ถœ๋ฐœ ์ •์ ์ด๋ผ๊ณ  ํ•˜์ž.

  ๊ทธ๋ฆฌ๊ณ  ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ์ดˆ๊ธฐํ™”์‹œํ‚ค์ž. ์ถœ๋ฐœ ์ •์ ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ๋‹น์—ฐํžˆ 0์ด๋‹ค.

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ 0 ∞ ∞ ∞ ∞ ∞

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ 0 ∞ ∞ ∞ ∞ ∞

  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ๋“ค ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์ •์ ์ธ 1๋ฒˆ์— ๋ฐฉ๋ฌธํ•œ๋‹ค. (์ถœ๋ฐœ ์ •์ ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•˜์—ฌ ํ•ด๋‹น ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.)

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ 7 9 ∞ ∞ 14

  ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์ •์ (1๋ฒˆ ์ •์ )์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์ •์ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.


์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ 7 9 ∞ ∞ 14

  ๋ฐฉ๋ฌธํ•œ 1๋ฒˆ ์ •์ ์„ ์ œ์™ธํ•˜๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ๋“ค ์ค‘ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์ •์ ์ธ 2๋ฒˆ์„ ๋ฐฉ๋ฌธํ•œ๋‹ค.

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ 9 22 ∞ 14

  ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์ •์ (2๋ฒˆ ์ •์ )์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์ •์ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ์ด๋•Œ, ์ถœ๋ฐœ ์ •์ ์œผ๋กœ ๋ถ€ํ„ฐ 3๋ฒˆ ์ •์ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ฑฐ๋ฆฌ์ธ 17์„ ์•Œ๋”๋ผ๋„ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” 3๋ฒˆ ์ •์ ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ฐ’์ด ๋” ์ž‘์œผ๋ฏ€๋กœ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๋Š”๋‹ค.

  ์ดํ›„์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ๊ทธ๋ฆผ๊ณผ ํ‘œ๋งŒ ์žˆ์–ด๋„ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.


์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ 9 22 ∞ 14

[์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ]

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ 20 ∞ 11

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ 20 ∞ 11

[์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ]

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ 20  20 ๋ฐฉ๋ฌธ

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ 20 20 ๋ฐฉ๋ฌธ

(4๋ฒˆ๊ณผ 5๋ฒˆ ์ค‘ ์–ด๋А ์ •์ ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•ด๋„ ์ƒ๊ด€์—†๋‹ค.)

[์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ]

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ 20 ๋ฐฉ๋ฌธ

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ 20 ๋ฐฉ๋ฌธ

[์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ]

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ

  ์ด๋Ÿฌํ•œ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์ณ์„œ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋œ๋‹ค. ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•œ ๊ตฌํ˜„์—์„œ๋Š” ๋ฐฉ๋ฌธํ•œ ์ •์ ์ด๋”๋ผ๋„ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ '๋ฐฉ๋ฌธ'์ด๋ผ๊ณ  ํ‘œ์‹œ๋˜์ง€ ์•Š๊ณ  '์ตœ๋‹จ ๊ฑฐ๋ฆฌ'๋ฅผ ํ‘œ์‹œํ•˜๊ฒŒ ๋œ๋‹ค. ์œ„์—์„œ๋Š” ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด '๋ฐฉ๋ฌธ'์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

  ์ตœ์ข…์ ์œผ๋กœ ์ถœ๋ฐœ ์ •์ (1๋ฒˆ ์ •์ )์—์„œ๋ถ€ํ„ฐ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ •์  ๋ฒˆํ˜ธ 1 2 3 4 5 6
์ตœ๋‹จ ๊ฑฐ๋ฆฌ 0 7 9 20 20 11

  

4. ๊ตฌํ˜„(JAVA) ๐Ÿฅœ

  ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์—๋Š” '์ˆœ์ฐจ ํƒ์ƒ‰'๊ณผ '์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹'์ด ์žˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๊ด€ํ•œ ๊ฒฐ๋ก ๋ถ€ํ„ฐ ์–˜๊ธฐํ•˜์ž๋ฉด ์•„๋ž˜์˜ ํ‘œ์™€ ๊ฐ™๋‹ค.

๊ตฌํ˜„ ๋ฐฉ์‹ ์ˆœ์ฐจ ํƒ์ƒ‰ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹
์‹œ๊ฐ„ ๋ณต์žก๋„ O(V ^ 2) O(E log V)

1. ์ˆœ์ฐจ ํƒ์ƒ‰

  ์ˆœ์ฐจ ํƒ์ƒ‰์€ 2์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ํ˜„์žฌ ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋œ ์ •์ ๋“ค์„ ์ผ์ผ์ด ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(V ^ 2)์ด๋‹ค.

  ์ž…๋ ฅ์€ ์ •์  ๊ฐœ์ˆ˜(N)์™€ ์ถœ๋ฐœ ์ •์ ์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ(S)๋ฅผ ๋จผ์ € ๋ฐ›๋Š”๋‹ค. (์œ„์—์„œ๋Š” ์ถœ๋ฐœ ์ •์ ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ด์šฉํ•˜์˜€๋Š”๋ฐ ์ฝ”๋“œ์—์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•œ๋‹ค.) ๊ทธ๋ฆฌ๊ณ  N * N ํ–‰๋ ฌ์˜ ๋ชจ์Šต์œผ๋กœ ๊ฐ€์ค‘์น˜๋“ค์„ ๋ฐ›์•„์˜จ๋‹ค.

6 0
0 7 9 0 0 14
0 0 10 15 0 0
0 0 0 11 0 2
0 0 0 0 6 0
0 0 0 0 0 0
0 0 0 0 9 0
public final class Main {
	
	static int V, S;
	
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(in.readLine(), " ");
		// ์ •์  ๊ฐœ์ˆ˜
		V = Integer.parseInt(st.nextToken());
		// ์ถœ๋ฐœ ์ •์  ์„ ํƒ - ๋™์ž‘๋ฐฉ์‹(1) 
		S = Integer.parseInt(st.nextToken());
		
		// ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•˜๋Š” 2์ฐจ์› ๋ฐฐ์—ด
		int[][] weights = new int[V][V];
		for(int i = 0; i < V; i++) {
			st = new StringTokenizer(in.readLine(), " ");
			for(int j = 0; j < V; j++) {
				weights[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		
		boolean[] visited = new boolean[V];
		
		// ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™” - ๋™์ž‘๋ฐฉ์‹(2)
		int[] minDistances = new int[V];
		final int INF = Integer.MAX_VALUE;
		Arrays.fill(minDistances, INF);
		minDistances[S] = 0;
		
		int minDistanceToCurrentV, currentV;
		
		for(int vCnt = 0; vCnt < V; vCnt++) {
			
			// ๋ฐฉ๋ฌธํ•  ์ •์ 
			currentV = -1;
			// ํ•ด๋‹น ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
			minDistanceToCurrentV = INF;
			
			// ๋ฐฉ๋ฌธ ํ•˜์ง€ ์•Š์€ ์ •์ ๋“ค ์ค‘์—์„œ
			// ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์ •์ ์— ๋ฐฉ๋ฌธ - ๋™์ž‘ ๋ฐฉ์‹(3)
			for(int i = 0; i < V; i++) {
				if(visited[i])
					continue;
				
				if(minDistances[i] < minDistanceToCurrentV) {
					minDistanceToCurrentV = minDistances[i];
					currentV = i;
				}
			}
			
			// ๋” ์ด์ƒ ๋ฐฉ๋ฌธ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
			if(currentV == -1) {
				break;
			}
			
			visited[currentV] = true;
			
			// ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ - ๋™์ž‘ ๋ฐฉ์‹(4)
			for(int i = 0; i < V; i++) {
				if(visited[i])
					continue;
				
				if(weights[currentV][i] == 0)
					continue;
				
				if(minDistances[currentV] + weights[currentV][i] 
						< minDistances[i]) {
					minDistances[i] = minDistances[currentV] + weights[currentV][i];
				}
			}
		}
		
		System.out.println("์ถœ๋ฐœ ์ •์  : " + S);
		for(int i = 0; i < V; i++) {
			System.out.println("์ตœ๋‹จ ๊ฑฐ๋ฆฌ[" + i + "] : " + minDistances[i]);
		}		
	}
}

2. ์šฐ์„ ์ˆœ์œ„ ํ(PQ)๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹

  PQ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ ๊ฐ„์„ ๋“ค์„ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œํ•œ๋‹ค. ์ตœ๋Œ€ E๊ฐœ๋ฅผ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ O(E log E)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. (E๊ฐœ * PQ์—์„œ ์‚ฝ์ž… ์‚ญ์ œ ์‹œ๊ฐ„ logE)

  ๋Œ€๊ฒŒ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ V^2 > E ์ด๋ฏ€๋กœ O(log E) = O(log V)๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ PQ๋ฅผ ์ด์šฉํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(E log V)๊ฐ€ ๋œ๋‹ค. (์ฐธ์กฐ)

public class Main {

	static int V, S;
	
	static class Vertex implements Comparable<Vertex> {
		public int idx;
		public int minDistance;
		
		public Vertex(int num, int minDistance) {
			this.idx = num;
			this.minDistance = minDistance;
		}

		@Override
		public int compareTo(Vertex o) {
			return this.minDistance - o.minDistance;
		}
	}

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(in.readLine(), " ");
		// ์ •์  ๊ฐœ์ˆ˜
		V = Integer.parseInt(st.nextToken());
		// ์ถœ๋ฐœ ์ •์  ์„ ํƒ - ๋™์ž‘๋ฐฉ์‹(1) 
		S = Integer.parseInt(st.nextToken());

		// ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•˜๋Š” 2์ฐจ์› ๋ฐฐ์—ด
		int[][] weights = new int[V][V];
		for(int i = 0; i < V; i++) {
			st = new StringTokenizer(in.readLine(), " ");
			for(int j = 0; j < V; j++) {
				weights[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		boolean[] visited = new boolean[V];

		// ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™” - ๋™์ž‘๋ฐฉ์‹(2)
		int[] minDistances = new int[V];
		final int INF = Integer.MAX_VALUE;
		Arrays.fill(minDistances, INF);
		minDistances[S] = 0;
		
		PriorityQueue<Vertex> pq = new PriorityQueue<>();
		pq.offer(new Vertex(S, minDistances[S]));
		
		while(!pq.isEmpty()) {
			
			// ๋ฐฉ๋ฌธ ํ•˜์ง€ ์•Š์€ ์ •์ ๋“ค ์ค‘์—์„œ
			// ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์ •์ ์— ๋ฐฉ๋ฌธ - ๋™์ž‘ ๋ฐฉ์‹(3)
			Vertex currentV = pq.poll();
			int currentVIdx = currentV.idx;
			if(visited[currentVIdx]) {
				continue;
			}
			
			visited[currentVIdx]= true;
			
			// ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ - ๋™์ž‘ ๋ฐฉ์‹(4)
			// ๊ณ„์† ํƒ์ƒ‰์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด PQ์— ๋„ฃ์–ด์ฃผ๊ธฐ 
			for(int i = 0; i < V; i++) {
				if(visited[i])
					continue;

				if(weights[currentVIdx][i] == 0)
					continue;

				if(minDistances[currentVIdx] + weights[currentVIdx][i] 
						< minDistances[i]) {
					minDistances[i] = minDistances[currentVIdx] + weights[currentVIdx][i];
					pq.offer(new Vertex(i, minDistances[i]));
				}
			}
		}

		System.out.println("์ถœ๋ฐœ ์ •์  : " + S);
		for(int i = 0; i < V; i++) {
			System.out.println("์ตœ๋‹จ ๊ฑฐ๋ฆฌ[" + i + "] : " + minDistances[i]);
		}		
	}
}

 

'๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ > ์ตœ๋‹จ ๊ฒฝ๋กœ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ”Œ๋กœ์ด๋“œ-์™€์ƒฌ(Floyd-Warshall) ์•Œ๊ณ ๋ฆฌ์ฆ˜  (0) 2023.04.03
    '๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ตœ๋‹จ ๊ฒฝ๋กœ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ํ”Œ๋กœ์ด๋“œ-์™€์ƒฌ(Floyd-Warshall) ์•Œ๊ณ ๋ฆฌ์ฆ˜
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

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