๋ฐ˜์‘ํ˜•
JuneBee
JuneBee
JuneBee
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (102)
    • ๐Ÿ‘” JOB (10)
      • ์ „ํ˜• ํ›„๊ธฐ (10)
    • ๐ŸŽฎ GAME (9)
      • ์ ค๋‹ค | ์™•๊ตญ์˜ ๋ˆˆ๋ฌผ ๊ฒŒ์ž„ ์ผ๊ธฐ (9)
    • ๐Ÿ““ STUDY (60)
      • JAVA (15)
      • TIL (2)
      • FASTCAMPUS (32)
      • ํ™˜๊ฒฝ์„ค์ • (2)
      • YOCTO (1)
      • OS (4)
      • ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์ธ ์•ก์…˜ (2)
    • ๐ŸŽงDAILY (6)
    • ๐Ÿ‡ฉ๐Ÿ‡ช GERMAN (17)
      • ๋Œ€ํ•™์› ์ง€์› (3)
      • ์ง€์› ํ›„๊ธฐ (11)
      • ๋…์ผ์–ด ์‹œํ—˜ (3)

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

  • ํ™ˆ
  • ์ผ์ƒ

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

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Java
  • SSAFY
  • ๊ฒŒ์ž„์ผ๊ธฐ
  • ์œ ํ•™
  • ์‹ธํ”ผ
  • ๋…์ผ์–ด
  • ๋…์ผ
  • ์ ค๋‹ค
  • ํŒจ์บ ์ฑŒ๋ฆฐ์ง€
  • ์ง์žฅ์ธ์ž๊ธฐ๊ณ„๋ฐœ
  • C/C++
  • ์™•๊ตญ์˜๋ˆˆ๋ฌผ
  • telc
  • ์„์‚ฌ
  • ๋ชจํ—˜์ผ๊ธฐ
  • ํ”Œ๋ ˆ์ด์ผ๊ธฐ
  • ์™•๋ˆˆ
  • ํ•œ๋ฒˆ์—๋๋‚ด๋Š”์ฝ”๋”ฉํ…Œ์ŠคํŠธ369JavaํŽธ์ดˆ๊ฒฉ์ฐจํŒจํ‚ค์ง€Online.
  • B1
  • ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฐฑํŠธ๋ž˜ํ‚น
  • ์ •๋ ฌ
  • ํฌ๋ฃจ์Šค์นผ
  • ๋…์ผ์œ ํ•™
  • ํŒจ์ŠคํŠธ์บ ํผ์Šคํ›„๊ธฐ
  • ์ง์žฅ์ธ์ธ๊ฐ•
  • sort
  • ์ทจ์—…์ค€๋น„
  • ํŒจ์ŠคํŠธ์บ ํผ์Šค
  • bruteforce

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

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

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

JuneBee

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 5์ผ์ฐจ
๐Ÿ““ STUDY/FASTCAMPUS

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 5์ผ์ฐจ

2021. 11. 5. 23:11
728x90
๋ฐ˜์‘ํ˜•

 ๋‚ ์งœ : 2021 ๋…„ 11 ์›” 5 ์ผ
์‹œ์ฒญ ๊ฐ•์˜  : ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ์˜ ์ดํ•ด์™€ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (1) ~ (4)

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ : ํฌ๋ฃจ์Šค์นผ๊ณผ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ด์ค‘์—์„œ, ์˜ค๋Š˜์€ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.

 

์‹ ์žฅ ํŠธ๋ฆฌ (Spanning Tree)

  • ์ „์ฒด ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
  • ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : Tutorialspoint

์œ„ ๊ทธ๋ž˜ํ”„์—์„œ, ๊ทธ๋ž˜ํ”„ G ๋Š” ์‚ฌ์ดํด์ด ์กด์žฌํ•œ๋‹ค. 

์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋Š”, ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์œผ๋ฉด์„œ ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„๋‹ค

 

์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ

  • ๊ฐ€์ค‘์น˜๊ฐ€ ์กด์žฌํ•˜๋Š” ์‹ ์žฅ ํŠธ๋ฆฌ ์ค‘,  ๊ฐ„์„ ์˜ ํ•ฉ(weight)์ด ๊ฐ€์žฅ ์ž‘์€ ํŠธ๋ฆฌ

 

๋งŒ์•ฝ, ์•ž์˜ ์‹ ์žฅ ํŠธ๋ฆฌ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ทธ๋ ‡๋‹ค๋ฉด, ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ํŠธ๋ฆฌ๋กœ ์ฒซ๋ฒˆ์งธ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๊ฐ€ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค. 

 

ํ˜„์‹ค ์„ธ๊ณ„์—์„œ ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ์šฉ๋˜๋Š” ์˜ˆ๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ธธ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์ด ์žˆ๋‹ค.

 

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ฆฌ๋”” ๋ฐฉ์‹์œผ๋กœ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ๋ชจ๋“  ์ •์ ์„ ๋…๋ฆฝ์ ์ธ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ฆ
  • ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ„์„  ์ •๋ ฌ (์ตœ์†Œ๊ฐ€ ๊ฐ€์žฅ ์œ„์—์˜ค๊ฒŒํ•œ๋‹ค)
  • ๋‘ ์ •์ ์˜ ๋ฃจํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋ฃจํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ๊ฒฝ์šฐ์—๋งŒ ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค 

๋งŒ์•ฝ, ๋‘ ์ •์ ์˜ ๋ฃจํŠธ๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

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

B์™€ C๋Š” ๋ฃจํŠธ๊ฐ€ ๊ฐ™๋‹ค (A)

 

B ์™€ C๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ์‚ฌ์ดํด์ด ์ƒ์„ฑ๋˜๊ณ , ๋”์ด์ƒ ์‹ ์žฅ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ฒŒ ๋œ๋‹ค.

 

๊ตฌํ˜„ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ทธ๋ ‡๋‹ค๋ฉด, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ.

์•ž์„œ ๋งํ–ˆ๋“ฏ์ด, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

  • ๋ชจ๋“  ์ •์ ์„ ๋…๋ฆฝ์ ์ธ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ฆ
  • ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ„์„  ์ •๋ ฌ (์ตœ์†Œ๊ฐ€ ๊ฐ€์žฅ ์œ„์—์˜ค๊ฒŒํ•œ๋‹ค)
  • ๋‘ ์ •์ ์˜ ๋ฃจํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋ฃจํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ๊ฒฝ์šฐ์—๋งŒ ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค 

Union-Find ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”, ์‚ฌ์ดํด์˜ ์œ ๋ฌด๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด ์œ ๋‹ˆ์˜จํŒŒ์ธ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋จผ์ €,

1. ๋ชจ๋“  ์ •์ ์„ ๋…๋ฆฝ์ ์ธ ์ง‘ํ•ฉ์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค.

A B C D E F G H

๊ฐ ๋…ธ๋“œ๋“ค์„ ๋ถ„๋ฆฌ์‹œํ‚ค๊ณ , ๋ณธ์ธ ๋…ธ๋“œ๋ฅผ ๋ณธ์ธ์—๋งŒ ์—ฐ๊ฒฐ์‹œ์ผœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.

 

2. Union : ๋‘๊ฐœ์˜ ์ง‘ํ•ฉ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์นœ๋‹ค

tree1 + tree2 = newTree

ํŠธ๋ฆฌ๋“ค์„ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์€ ํŠธ๋ฆฌ๋ฅผ ๊ณจ๋ผ์„œ ํ•ฉ์ณ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Union ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ํŠธ๋ฆฌ๋ฅผ ํ•ฉ์นœ๋‹ค

 

3. Find : ๋‘ ๋…ธ๋“œ์˜ ๋ฃจํŠธ๊ฐ€ ๊ฐ™์€์ง€ ํŒ๋‹จํ•œ๋‹ค

๋‘ ๋…ธ๋“œ์˜ ๋ฃจํŠธ๊ฐ€ ๊ฐ™๋‹ค๋ฉด, ์‚ฌ์ดํด์ด ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— Find๋ฅผ ํ†ตํ•˜์—ฌ ๋ฃจํŠธ๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค.

 

Union-by-rank ์™€ Path-Compression ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€, ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : studytonight

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„ ๊ทธ๋ž˜ํ”„๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

a ๋…ธ๋“œ๊ฐ€ ๋ฃจํŠธ๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, e ๋…ธ๋“œ์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ๊ฐ€์•ผํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋ฅผ ๋„๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง€๊ฒŒ ๋˜๋Š”๋ฐ (O(N)) , ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Union-by-rank ์™€ Path - compression ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

Union-by-rank

rank ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ , union ์‹œ ๋‘ ํŠธ๋ฆฌ์˜ ๋žญํฌ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋†’์ด๊ฐ€ ์ž‘์€ ํŠธ๋ฆฌ๋ฅผ ํฐ ํŠธ๋ฆฌ์— ๋ถ™์ด๊ณ  ๋†’์ด๊ฐ€ ๊ฐ™๋‹ค๋ฉด ํ•œ์ชฝ์„ ํฌ๊ฒŒ ๋งŒ๋“ค๊ณ  ํ•ฉ์ฒดํ•œ๋‹ค.

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : Lemidia's Programming  

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ฉด ๋†’์ด๊ฐ€ ๋ฌดํ•œ์ • ๋†’์•„์ง€๋Š”๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Path Compression

1. find๋ฅผ ์‹คํ–‰ํ•œ ๋…ธ๋“œ์—์„œ ๊ฑฐ์ณ๊ฐ„ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ์— ๋‹ค์ด๋ž™ํŠธ๋กœ ์—ฐ๊ฒฐ์‹œํ‚ด

2. find๋ฅผ ์‹คํ–‰ํ•œ ๋…ธ๋“œ๋Š”, ์ดํ›„๋ถ€ํ„ฐ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ•œ๋ฒˆ์— ์•Œ ์ˆ˜ ์žˆ์Œ

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : Wikimedia Commons

์œ„ ๊ทธ๋ฆผ์—์„œ, a์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด find ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด : a ๋ถ€๋ชจ๋Š” b, b์˜ ๋ถ€๋ชจ๋Š” c, c์˜ ๋ถ€๋ชจ๋Š” d . d๋Š” ๋ถ€๋ชจ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์ด๋ฏ€๋กœ ๋ฃจํŠธ ๋…ธ๋“œ์ด๋‹ค.

ํ•˜์ง€๋งŒ, ๊ณ„์† ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋ฃจํŠธ๋ฅผ ์ฐพ๋Š”๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐ”๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋งค๋ฒˆ ๋ถ€๋ชจ๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์„œ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

a: ๋ถ€๋ชจ- b

b: ๋ถ€๋ชจ - c -> a์˜ ๋ฃจํŠธ๋ฅผ c๋กœ ์—…๋ฐ์ดํŠธ

c: ๋ถ€๋ชจ -d -> a,b์˜ ๋ฃจํŠธ๋ฅผ d๋กœ ์—…๋ฐ์ดํŠธ

 

 

์ฝ”๋“œ ๊ตฌํ˜„

์œ„์—์„œ ๋งํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์ด ํ•„์š”ํ•˜๋‹ค:

  • Node Class : ๊ฐ€์ค‘์น˜, ์ •๋ ฌ ์˜ค๋ฒ„๋ผ์ด๋“œ
  • Find method : ๋ฃจํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค (path compression ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„ ๋‹จ์ถ•)
  • Union method : ๊ฐ„์„ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค (union by rank ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉ)
  • MakeSet method: ๋žญํฌ๋ฅผ ์ดˆ๋ฐ˜์— ์ดˆ๊ธฐํ™” ์‹œ์ผœ์„œ ๋ชจ๋“  ์ •์ ์„ ๋…๋ฆฝ์ ์ธ ์ •์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•  ๋ฉ”์„œ๋“œ
  • Kruskal method: ์œ„ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹ค์งˆ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ๋ฉ”์„œ๋“œ

์‹œ์ž‘ํ•˜๊ธฐ ์•ž์„œ, ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋กํ•  ํ•ด์‰ฌ๋งต๊ณผ ๋ณธ์ธ ๋žญํฌ๋ฅผ ๊ธฐ๋กํ•  ํ•ด์‰ฌ๋งต์„ ์„ค์ •ํ•ด์ค€๋‹ค.

HashMap<String, String> parent = HashMap<>();
HashMap<String, Integer> rank = HashMap<>();

 

1. ๋…ธ๋“œ ํด๋ž˜์Šค
์ •๋ ฌ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ weight์ด ํ•ต์‹ฌ
public static class Node implements Comparable<Node>{
	int weight, V, U;
    //setter method ๊ตฌํ˜„
    @Override
    public int compareTo(Node node){
    	return this.weight - node.weight;
    }
}
2. Find Method
Path Compression ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋‹จ์ถ•
public String find (String node) {
	if(parent.get(node)!=node){	//์ž๊ธฐ ๋ถ€๋ชจ๊ฐ€ ๋ฃจํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
    	parent.put(node.this.find(this.parent.get(node))); //๋ถ€๋ชจ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ
    }
	retunr this.parent.get(node);//์ตœ์ข… ๋ฃจํŠธ ๋ฐ˜ํ™˜
}
3. Union Method
Union by Rank ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋‘ ๊ฐ„์„ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค
public void union(String u, String v){ //๋…ธ๋“œ u์™€ ๋…ธ๋“œ v
	String root1 = find(u); //๋…ธ๋“œ u์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค
    String root2 = find(v); //๋…ธ๋“œ v์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค
    //union by rank ๊ธฐ๋ฒ•
    if(rank.get(root1) > rank.get(root2)){ //u์˜ ๋žญํฌ๊ฐ€ v์˜ ๋žญํฌ๋ณด๋‹ค ํฌ๋‹ค๋ฉด v๋ฅผ u์— ๋”ํ•œ๋‹ค
    	parent.put(root2, root1);
    }
    else{
    	parent.put(root1, root2); //๋ฐ˜๋Œ€์ธ ์ƒํ™ฉ
        if(rank.get(root1) == rank.get(root2){ //๋งŒ์•ฝ ๋žญํฌ๊ฐ€ ๊ฐ™์œผ๋ฉด ํ•˜๋‚˜๋ฅผ ์กฐ์ •ํ•œ๋‹ค
        	rank.put(root2, rank.get(root2)+1 ); //๋ฃจํŠธ 2์˜ ๋žญํฌ๋ฅผ ์กฐ์ •์‹œํ‚ด
        }
    }
}

 

4. ์ดˆ๊ธฐํ™”
์ „์ฒด ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐ›์•„ ์ž์‹ ์„ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ณ  ๋žญํฌ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์„œ
๋ถ„๋ฆฌ๋œ set ์œผ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…
public void makeSet(String node) {
	parent.put(node, node) ;//์ž๊ธฐ ์ž์‹  ์—ฐ๊ฒฐ
    rank.put(node, 0);//๋žญํฌ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
}

 

5. ํฌ๋ฃจ์Šค์นผ ๋ฉ”์„œ๋“œ
์•ž์„œ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. (์ตœ๋‹จ๊ฒฝ๋กœ)
// nodes : ๊ฐ ๋…ธ๋“œ๋ฅผ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ [ex : "a", "b", "c", "d"]
// infoList : ๊ฐ ๋…ธ๋“œ ์ •๋ณด๋“ค์„ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ [ex : u = "a", v = "b", weight = "3"]
public ArrayList<Node> Kruskal (ArrayList<String> nodes, ArrayList<Node> infoList){
	ArrayList<Node> mst = new ArrayList<>();//์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋‹ด์„ ์ตœ์†Œ์‹ ์žฅ๋ฆฌ์ŠคํŠธ
    
    //์ดˆ๊ธฐํ™”
    for(int i = 0 ; i< nodes.size() ; i++){ this.makeSet(nodes.get(i);}
    //๊ฐ„์„ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ sort
    Collections.sort(infoList);
    
    //์ตœ๋‹จ๊ฒฝ๋กœ 
    for(int i = 0 ; i < infoList.size() ; i++){
    	if(find(infoList.get(i).u) != find(infoList.get(i).v){ //from-to์˜ ๋ฃจํŠธ๊ฐ€ ๋‹ค๋ฅผ๋•Œ : ์ถ”๊ฐ€๊ฐ€๋Šฅ
        	union(infoList.get(i).u , infoList.get(i).v); //ํŠธ๋ฆฌ ํ•ฉ์ฒด
        	mst.add(infoList.get(i)); //์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ์— ํ˜„์žฌ ๊ฒฝ๋กœ ์ถ”๊ฐ€
        }
    }
    
   return mst ; //์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(์ตœ๋‹จ๊ฒฝ๋กœ)๋ฅผ ๋ฐ˜ํ™˜
   }
}

 

 

 

 

 

 

 

 

 

 

 

 


ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ๋ฐ”๋กœ๊ฐ€๊ธฐ๐Ÿ‘‰ https://bit.ly/3FVdhDa

 

์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ | ํŒจ์ŠคํŠธ์บ ํผ์Šค

๋”ฑ 5์ผ๊ฐ„ ์ง„ํ–‰๋˜๋Š” ํ™˜๊ธ‰์ฑŒ๋ฆฐ์ง€๋กœ ์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰๋ฐ›์œผ์„ธ์š”! ๋” ๋Šฆ๊ธฐ์ „์— ์ž๊ธฐ๊ณ„๋ฐœ ๋ง‰์ฐจ ํƒ‘์Šน!

fastcampus.co.kr

๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ““ STUDY > FASTCAMPUS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 7์ผ์ฐจ  (0) 2021.11.07
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 6์ผ์ฐจ  (0) 2021.11.06
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 4์ผ์ฐจ  (0) 2021.11.04
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 3์ผ์ฐจ  (2) 2021.11.03
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 2์ผ์ฐจ  (1) 2021.11.02
    '๐Ÿ““ STUDY/FASTCAMPUS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 7์ผ์ฐจ
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 6์ผ์ฐจ
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 4์ผ์ฐจ
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 3์ผ์ฐจ
    JuneBee
    JuneBee
    โ‚Šหš.๐ŸŽง๐Ÿ““ ๊ธฐ๋ก์šฉ ๋ธ”๋กœ๊ทธ ๐“‚ƒ๐Ÿ–Š

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