๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฐ˜์‘ํ˜•

์•Œ๊ณ ๋ฆฌ์ฆ˜

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ_ Kruskal & Prim ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ (MST, Minimum Spanning Tree) ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ž€, ๊ทธ๋ž˜ํ”„์—์„œ ์ˆœํ™˜ ์—†์ด ๋ชจ๋“  ์ •์ ์„ ์ž‡๋Š” ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ž€, ์ด๋Ÿฌํ•œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ ์ค‘์—์„œ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ๊ฐ€์žฅ ์ž‘์€ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํฌ๋ฃจ์Šค์นผ(Kruskal)๊ณผ ํ”„๋ฆผ(Prim) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค. ํฌ๋ฃจ์Šค์นผ (Kruskal) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋“  ๊ฐ„์„  ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ๊ฐ„์„ ๋ถ€ํ„ฐ ์—ฐ๊ฒฐํ•ด ์ฃผ๋ฉด์„œ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ฐ„์„ ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋ฉด์„œ ์ˆœํ™˜์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐ„์„ ์„ ๋ฒ„๋ฆฌ๊ณ  ๋‹ค์Œ ๊ฐ„์„ ์„ ์„ ํƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋•Œ, Union-Find ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ„์„ ๋“ค์„ ๊ฐ€์ค‘์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. .. ๋”๋ณด๊ธฐ
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ_๋‹ค์ต์ŠคํŠธ๋ผ & ๋ฒจ๋งŒํฌ๋“œ ๋‹ค์ต์ŠคํŠธ๋ผ & ๋ฒจ๋งŒํฌ๋“œ ์ด ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ž˜ํ”„์—์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ? ์ตœ๋‹จ ๊ฒฝ๋กœ๋ž€ ๊ทธ๋ž˜ํ”„์—์„œ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ, ๋‹ค์ต์ŠคํŠธ๋ผ์™€ ๋ฒจ๋งŒํฌ๋“œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Dijkstra Algorithm) ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ž˜ํ”„์—์„œ ์Œ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์—†์„ ๋•Œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. V๊ฐœ์˜ ์ •์ ๊ณผ ์–‘์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง„ E๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง„ ๊ทธ๋ž˜ํ”„์—์„œ ์ถœ๋ฐœ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค. ํ˜„์žฌ ์ •์ ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •์ ๋“ค์„ ๋ชจ๋‘ ๋ณธ๋‹ค. ํ˜„์žฌ ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” ๋‹ค์Œ ์ •์ ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ์™€ ์‹œ์ž‘ ์ •์ ๊ณผ ํ˜„์žฌ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ.. ๋”๋ณด๊ธฐ
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ํˆฌ ํฌ์ธํ„ฐ & ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ํˆฌ ํฌ์ธํ„ฐ & ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1์ฐจ์› ๋ฐฐ์—ด์„ 2ํšŒ ์ด์ƒ ๋ฐ˜๋ณต์ ์œผ๋กœ ํƒ์ƒ‰์„ ํ•ด์•ผํ•  ๊ฒฝ์šฐ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•œ๋‹ค๋ฉด O(N^2) ์ด์ƒ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๊ฑธ๋ฆฌ์ง€๋งŒ ํˆฌ ํฌ์ธํ„ฐ์™€ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ O(N)์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค. ํˆฌ ํฌ์ธํ„ฐ๋Š” ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๋Š” ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ณ ์ •์ ์ด๋ผ๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ํˆฌ ํฌ์ธํ„ฐ(Two Pointer) ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ 1์ฐจ์› ๋ฐฐ์—ด์—์„œ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” 2๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•ด๊ฐ€๋ฉด์„œ ์›ํ•˜๋Š” ๊ฒƒ์„ ์–ป๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— ํˆฌ ํฌ์ธํ„ฐ๋Š” ์—ฐ์†๋˜๊ณ  ๊ธธ์ด๊ฐ€ ๊ฐ€๋ณ€์ ์ธ ๋ถ€๋ถ„ ๋ฐฐ์—ด๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์„ ์ผ์น˜์‹œํ‚ค๋Š” ๋ฌธ์ œ์— ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ํˆฌ ํฌ์ธํ„ฐ๋กœ ํ•ด๊ฒฐํ•ด์•ผ.. ๋”๋ณด๊ธฐ