์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ—‚๏ธ ์ •๋ฆฌ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ—‚๏ธ ์ •๋ฆฌ

Bellman-Ford (๋ฒจ๋งŒ-ํฌ๋“œ)

V๊ฐœ์˜ ์ •์ ๊ณผ E๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง„ ๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„ G์—์„œ ํŠน์ • ์ถœ๋ฐœ ์ •์ (S)์—์„œ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๐Ÿ‘€ ํŠน์ง• ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ–๋Š” ๊ฐ„์„ ๋„ ์กด์žฌ ๊ฐ€๋Šฅํ•˜๋‹ค. ์Œ์˜ ์‚ฌ์ดํด์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” V-1๋ฒˆ E๊ฐœ์˜ ๋ชจ๋“  ๊ฐ„์„ ์„ ํ™•์ธํ•œ๋‹ค. ์Œ์˜ ์‚ฌ์ดํด ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ•œ ๋ฒˆ ๋” E๊ฐœ์˜ ๊ฐ„์„ ์„ ํ™•์ธํ•œ๋‹ค. ์ด ์—ฐ์‚ฐ ํšŸ์ˆ˜ = VxE โŒ›๏ธ ์‹œ๊ฐ„ ๋ณต์žก๋„ = O(VE) V๋ฒˆ์งธ ๋ชจ๋“  ๊ฐ„์„ ์„ ํ™•์ธํ–ˆ์„ ๋•Œ ๊ฑฐ๋ฆฌ๋ฐฐ์—ด์ด ๊ฐฑ์‹ ๋˜์—ˆ๋‹ค๋ฉด ๊ทธ๋ž˜ํ”„ G๋Š” ์Œ์˜ ์‚ฌ์ดํด์„ ๊ฐ€์ง€๋Š” ๊ทธ๋ž˜ํ”„์ด๋‹ค. ์œ„์™€ ๊ฐ™์ด ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ์„ ๋•Œ, ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ์ •์  1์—์„œ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด 1 โž” 2 = 1 1 โž” 2 โž” 3 = 2 1 โž” 2 โž” 3 โž” ..

์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ—‚๏ธ ์ •๋ฆฌ

LCA (์ตœ์†Œ๊ณตํ†ต์กฐ์ƒ)

LCA๋Š” Lowest Common Ancestor์˜ ์•ฝ์ž๋กœ ์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ํŠธ๋ฆฌ๊ตฌ์กฐ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ ๋‘ ์ •์  u, v์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์„ ์ฐพ์œผ๋ฉด ๋œ๋‹ค. ์ด ๊ทธ๋ž˜ํ”„์—์„œ 13๋ฒˆ ์ •์ ๊ณผ 15๋ฒˆ ์ •์ ์˜ ์ตœ์†Œ๊ณตํ†ต์กฐ์ƒ์€ 5๋ฒˆ ์ •์ ์ด๋‹ค. 11๋ฒˆ ์ •์ ๊ณผ 13๋ฒˆ ์ •์ ์˜ ์ตœ์†Œ๊ณตํ†ต์กฐ์ƒ์€ 1๋ฒˆ ์ •์ ์ด๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ 12๋ฒˆ ์ •์ ๊ณผ 14๋ฒˆ ์ •์ ์˜ ์ตœ์†Œ๊ณตํ†ต์กฐ์ƒ์€ 12๋ฒˆ ์ •์ ์ด๋‹ค. ๐Ÿ•น๏ธ LCA ๊ณผ์ • 1๏ธโƒฃ ์ž…๋ ฅ๋ฐ›์€ ์ •์ ๊ณผ ๊ฐ„์„ ์œผ๋กœ ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ (ํŠธ๋ฆฌ๊ตฌ์กฐ) ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 2๏ธโƒฃ BFS๋‚˜ DFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ depth๋ฅผ, DP๋ฅผ ํ™œ์šฉํ•˜์—ฌ parent ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 3๏ธโƒฃ LCA(u, v) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ u์™€ v์˜ ์ตœ์†Œ๊ณตํ†ต์กฐ์ƒ์„ ์ฐพ๋Š”๋‹ค. u์™€ v ์ค‘์—์„œ ๊นŠ์ด๊ฐ€ ๋” ๊นŠ์€ ์ •์ ์„ ์–•์€ ๊นŠ..

์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ—‚๏ธ ์ •๋ฆฌ

Binary Search (์ด๋ถ„ํƒ์ƒ‰)

Binary Search๋Š” ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ขํ˜€๊ฐ€๋ฉฐ ์›ํ•˜๋Š” ๊ฐ’์„ ์–ป๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, 3๊ฐœ์˜ ๋ณ€์ˆ˜ (low, mid, high)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ํƒ์ƒ‰ํ•œ๋‹ค. ์ค‘์•™๊ฐ’(mid)์„ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•˜์—ฌ low์™€ high ๊ฐ’์„ ์ •ํ•˜๊ณ , ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ๊ฐ’์„ ์–ป์–ด๋‚ด๋ฉด ๋œ๋‹ค. ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ค๋ฉด์„œ start์™€ end ๊ฐ’์„ ์ •ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‚ฎ๊ณ , ์ˆœ์ฐจ์  ํƒ์ƒ‰๋ณด๋‹ค ๋น ๋ฅธ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๐Ÿ•น๏ธ Binary Search ๊ณผ์ • 1๏ธโƒฃ ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ๋น„๊ตํ•œ๋‹ค. ์ค‘๊ฐ„ ๊ฐ’์€ (low+high)/2 ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. 2๏ธโƒฃ ์ค‘๊ฐ„ ๊ฐ’์ด ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์ค‘๊ฐ„๊ฐ’๋ณด๋‹ค..

์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ—‚๏ธ ์ •๋ฆฌ

Floyd-Warshall (ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ)

V๊ฐœ์˜ ์ •์ ๊ณผ E๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง„ ๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„ G์—์„œ ๋ชจ๋“  ์ •์  ์‚ฌ์ด์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ (๋ชจ๋“  ๋…ธ๋“œ ๊ฐ„์— ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜) ์Œ์ˆ˜ ์‚ฌ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๊ฐ ๋ชจ๋“  ์ •์ ์—์„œ ๊ฐ ๋ชจ๋“  ์ •์ ์— ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์Œ์ˆ˜์ธ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ–๋Š” ๊ฐ„์„ ์ด ์กด์žฌํ•ด๋„ ๋œ๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋Š” ์–ด๋–ค ๊ฒฝ์œ ์ง€(K)๋ฅผ ๊ฑฐ์น˜๊ฑฐ๋‚˜ ๊ฑฐ์น˜์ง€ ์•Š๋Š” ๊ฒฝ๋กœ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ex). ์ •์  A์™€ ์ •์  B ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ = A-B ๋˜๋Š” A-K-B ๋งŒ์•ฝ, ๊ฒฝ์œ ์ง€๋ฅผ ๊ฑฐ์นœ๋‹ค๋ฉด ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ด๋ฃจ๋Š” ๋ถ€๋ถ„ ๊ฒฝ๋กœ ๋˜ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ์ด๋‹ค. ex). A-K์™€ K-B ๋˜ํ•œ ์ตœ๋‹จ๊ฒฝ๋กœ ๐Ÿ‘€ ํŠน์ง• ์ˆœํ™˜๋งŒ ์—†๋‹ค๋ฉด ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜๋„ ๊ฐ€๋Šฅํ•˜๋‹ค ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ ๊ณ„ํš๋ฒ•(DP)์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค. โŒ›๏ธ ์‹œ๊ฐ„๋ณต์žก๋„ : θ(V³) (V๋Š” ๋…ธ๋“œ..

์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ—‚๏ธ ์ •๋ฆฌ

Union Find (์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ)

๊ทธ๋ž˜ํ”„ (ํŠธ๋ฆฌ) ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋‘ ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์— ์†ํ•ด์žˆ๋Š”์ง€ ํŒ๋ณ„ Union ์—ฐ์‚ฐ & Find ์—ฐ์‚ฐ union(x, y) : ๋…ธ๋“œ๋ฅผ ํ•ฉ์น˜๋Š” ์—ฐ์‚ฐ find(x) : x๊ฐ€ ์–ด๋Š ๊ทธ๋ž˜ํ”„์— ์†ํ•ด ์žˆ๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š” ์—ฐ์‚ฐ (๋…ธ๋“œ์˜ ๋ฃจํŠธ ๋…ธ๋“œ ํƒ์ƒ‰) ๐Ÿ•น๏ธ ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ ๊ณผ์ • ํ˜„์žฌ 5๊ฐœ์˜ ๋…ธ๋“œ๋Š” ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์€ ์ƒํƒœ์ด๋ฏ€๋กœ ๋ถ€๋ชจ๋Š” ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค. (๋ถ€๋ชจ ๋…ธ๋“œ ์ดˆ๊ธฐํ™”) x๋Š” ๋…ธ๋“œ ๋ฒˆํ˜ธ์ด๊ณ , parent[x]๋Š” x๊ฐ€ ์–ด๋–ค ๋ถ€๋ชจ ๋…ธ๋“œ์— ์†ํ•ด ์žˆ๋Š”์ง€ ๋‚˜ํƒ€๋‚ธ๋‹ค. 1๏ธโƒฃ union(1, 2) ๋…ธ๋“œ 1๊ณผ ๋…ธ๋“œ 2๋ฅผ ํ•ฉ์นœ๋‹ค. ๋…ธ๋“œ 2์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” 1์ด ๋˜์—ˆ๋‹ค. parent[2] = 1 2๏ธโƒฃ union(3, 4) / union(3, 5) ๋…ธ๋“œ 3๊ณผ ๋…ธ๋“œ 4๋ฅผ ํ•ฉ์น˜๊ณ , ๋…ธ๋“œ 3๊ณผ ๋…ธ๋“œ 5๋ฅผ ํ•ฉ์นœ๋‹ค. ๋…ธ๋“œ 4์™€ ๋…ธ..

์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ—‚๏ธ ์ •๋ฆฌ

Dijkstra (๋‹ค์ต์ŠคํŠธ๋ผ)

DP(๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ)๋ฅผ ํ™œ์šฉํ•œ ๋Œ€ํ‘œ์ ์ธ ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์€ ๋ฌธ์ œ๊ฐ€ ํฐ ๋ฌธ์ œ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ๋•Œ ๊ทธ ์ด์ „๊นŒ์ง€ ๊ตฌํ–ˆ๋˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์ •๋ณด๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๐Ÿ•น๏ธ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณผ์ • ์ถœ๋ฐœ ๋…ธ๋“œ ์„ค์ • ์ถœ๋ฐœ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋…ธ๋“œ์˜ ์ตœ์†Œ ๋น„์šฉ ์ €์žฅ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ๊ฐ€์žฅ ๋น„์šฉ์ด ์ ์€ ๋…ธ๋“œ ์„ ํƒ ํ•ด๋‹น ๋…ธ๋“œ ๊ฑฐ์ณ์„œ ํŠน์ •ํ•œ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์†Œ ๋น„์šฉ ๊ฐฑ์‹  3๏ธโƒฃ, 4๏ธโƒฃ๋ฒˆ ๋ฐ˜๋ณต ๊ธฐ๋ณธ์ ์ธ ๋‹ค์ต์ŠคํŠธ๋ผ - ์„ ํ˜•ํƒ์ƒ‰ public class Main{ static int INF = 10000..

soogoori
'์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ—‚๏ธ ์ •๋ฆฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)