๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก๊ทธ๋ž˜ํ”„ (3)

JUINTINATION

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณ ๋“์  Kit - ๊ทธ๋ž˜ํ”„(๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ, ์ˆœ์œ„, ๋ฐฉ์˜ ๊ฐœ์ˆ˜)

1๋ฒˆ ๋ฌธ์ œ: ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œhttps://school.programmers.co.kr/learn/courses/30/lessons/49189 ํ”„๋กœ๊ทธ๋ž˜๋จธ์ŠคSW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„programmers.co.krํ’€์ด๊ฐ๊ฐ 1๋ถ€ํ„ฐ n๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ ํ˜€์žˆ๋Š” n๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ์„ ๋•Œ 1๋ฒˆ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ๋ž€ ์ตœ๋‹จ๊ฒฝ๋กœ๋กœ ์ด๋™ํ–ˆ์„ ๋•Œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋…ธ๋“œ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n, ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด vertex๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, 1๋ฒˆ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ..

์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(Minimum Spanning Tree)

์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST)๋ž€? ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์ดํด ์—†์ด ๋ชจ๋“  ์ ๋“ค์„ ์—ฐ๊ฒฐ์‹œํ‚จ ํŠธ๋ฆฌ๋“ค ์ค‘ ์„ ๋ถ„๋“ค์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ์ด ์ตœ์†Œ์ธ ํŠธ๋ฆฌ ์ฆ‰, ์–ด๋–ค ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์˜ ์‹ ์žฅ ํŠธ๋ฆฌ ์ค‘ ์„ ๋ถ„๋“ค์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ์ด ์ตœ์†Œ์ธ ํŠธ๋ฆฌ ์‹ ์žฅ ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์ดํด ์—†์ด ๋ชจ๋“  ์ ๋“ค์„ ์—ฐ๊ฒฐ์‹œํ‚จ ํŠธ๋ฆฌ๋กœ ์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„์˜ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ์‚ฌ์ดํด์ด ์—†๋„๋ก ๋ชจ๋“  ์ ์„ ์—ฐ๊ฒฐ์‹œํ‚ค๋ฉด ๋œ๋‹ค. ์‹ ์žฅ ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์ดํด ์—†์ด ๋ชจ๋“  ์ ๋“ค์„ ์—ฐ๊ฒฐ์‹œํ‚จ ํŠธ๋ฆฌ๋กœ ๊ทธ๋ž˜ํ”„์˜ ์ ์ด n๊ฐœ ์žˆ๋‹ค๋ฉด ์‹ ์žฅ ํŠธ๋ฆฌ์—๋Š” n-1๊ฐœ์˜ ์„ ๋ถ„์ด ์žˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ ์™ผ์ชฝ ๊ทธ๋ฆผ์˜ ๊ทธ๋ž˜ํ”„์˜ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋Š” ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์˜ ๊ทธ๋ž˜ํ”„์™€ ๊ฐ™๋‹ค. MST๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ์ฐพ๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Kruskal's Algorithm)๊ณผ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ..

๊นŠ์ด์šฐ์„ ํƒ์ƒ‰(DFS)๊ณผ ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰(BFS)

๊ทธ๋ž˜ํ”„(Graph)๋ž€? ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ๊ทธ๋ž˜ํ”„ G๋Š” (V, E)๋กœ ํ‘œ์‹œ ์ •์ (vertices) ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํŠน์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด ๋…ธ๋“œ(node)๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ ๊ฐ„์„ (edge) ์ •์ ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„ ๋งํฌ(link)๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ DFS๋ž€? ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(depth-first search)ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ฐ€๋‹ค๊ฐ€ ๋” ์ด์ƒ ๊ฐˆ ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐˆ๋ฆผ๊ธธ๋กœ ๋Œ์•„์™€์„œ ์ด ๊ณณ์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์‹œ ํƒ์ƒ‰ ์ง„ํ–‰ ์Šคํƒ(Stack)์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์žฌ๊ท€ํ•จ์ˆ˜ ์‚ฌ์šฉ # ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ DFS depth_first_search(v): v๋ฅผ ๋ฐฉ๋ฌธ๋˜์—ˆ๋‹ค๊ณ  ํ‘œ์‹œ; for all u ∈ (v์— ์ธ์ ‘ํ•œ ์ •์ ) do if (u๊ฐ€ ์•„์ง ๋ฐฉ๋ฌธ๋˜์ง€ ์•Š์•˜์œผ๋ฉด) then depth_first_..