Algorithm/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ 7

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ด์ง„ ํƒ์ƒ‰(Binary Search)

์ด์ง„ ํƒ์ƒ‰ ๐Ÿ’ก ์•„์ด๋””์–ด ๋ฐฐ์—ด์—์„œ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ขํ˜€๊ฐ€๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•ด๋ณด์ž!! โญ๋‹จ, ๋ฐฐ์—ด ๋‚ด ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.โญ ๐Ÿ’ก ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช… ํƒ์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฒ”์œ„(start, end)๋ฅผ ์ •ํ•œ๋‹ค. start์™€ end ์‚ฌ์ด mid๋ฅผ ์ •ํ•œ๋‹ค. mid์˜ ๋ฐ์ดํ„ฐ์™€ ์ฐพ์œผ๋ ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•œ๋‹ค. 1) ๊ฐ™์„ ๊ฒฝ์šฐ - ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ๋‹ค. 2) ์ค‘๊ฐ„์ ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ํด ๊ฒฝ์šฐ - end๋ฅผ (mid - 1)๋กœ ์„ค์ •ํ•ด mid์˜ ์™ผ์ชฝ์„ ํƒ์ƒ‰ํ•œ๋‹ค. 3) ์ค‘๊ฐ„์ ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ์ž‘์„ ๊ฒฝ์šฐ - start๋ฅผ (mid + 1)๋กœ ์„ค์ •ํ•ด mid์˜ ์˜ค๋ฅธ์ชฝ์„ ํƒ์ƒ‰ํ•œ๋‹ค. start์™€ end ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋™์•ˆ 2~3์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๐Ÿ’ก ์†Œ์Šค ์ฝ”๋“œ ๋‹ค์Œ์€ array ๋‚ด์˜ target์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค...

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ - ์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ๊ณ„์ˆ˜ ์ •๋ ฌ

์ •๋ ฌ(Sorting)์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ์„œ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋ฉด ์ด์ง„ ํƒ์ƒ‰(Binary Search)์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ๋˜ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•  ๋•Œ ์–ด๋–ค ์‹์œผ๋กœ๋“  ์ •๋ ฌํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์‹œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์„ ํƒ ์ •๋ ฌ(Selection Sort) ๐Ÿ’ก ์•„์ด๋””์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๋•Œ, ๊ทธ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ , ๊ทธ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด๋ณด์ž => ๋งค๋ฒˆ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์„ ํƒํ•œ๋‹ค ๐Ÿ’ก ์†Œ์Šค์ฝ”๋“œ def sel_sort(array): for i in range(len(array)):..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ์ฐจ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์†Œ๊ฐœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘ ๊ณผ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„(ํŒŒ์ด์ฌ) ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŠน์ • ์ •์ ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ ๊ณ„์‚ฐ Single-Source Shortest Paths ๋ฌธ์ œ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ ๋งค ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ๋น„์šฉ์ด ์ ์€ ๋…ธ๋“œ ์„ ํƒ์„ ๋ฐ˜๋ณต(๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘ ๊ณผ์ • ์ถœ๋ฐœ ์ •์  ์„ ํƒ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ INF๋กœ ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์  ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์ •์  ์„ ํƒ ํ•ด๋‹น ์ •์ ์„ ๊ฑฐ์ณ ๋‹ค๋ฅธ ์ •์ ์œผ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ๊ฐฑ์‹  3~4๋ฒˆ ๊ณผ์ • ๋ฐ˜๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์  ์ค‘์— ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์ •์ ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ import heapq import sys input..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) ๊ฐœ๋… ๋ฐ ๊ตฌํ˜„(ํŒŒ์ด์ฌ)

๋ชฉ์ฐจ BFS์˜ ๊ฐœ๋… BFS์˜ ์žฅ๋‹จ์  BFS์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ BFS์˜ ๊ตฌํ˜„ BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)์ด๋ž€? BFS(Breadth First Search) ๋˜๋Š” ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๊ณ  ํ•จ ์‹œ์ž‘ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ€๊นŒ์šด ์ •์ ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐฉ๋ฒ• ํ(queue)๋ฅผ ์ด์šฉํ•ด ๋ฐฉ๋ฌธํ•œ ์ •์ ๋“ค์„ ์ฐจ๋ก€๋กœ ์ €์žฅํ•˜๊ณ  ๊บผ๋ƒ„ BFS์˜ ๋™์ž‘ ๊ณผ์ • ํƒ์ƒ‰ ์‹œ์ž‘ ์ •์ ์„ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ํ์—์„œ ์ •์ ์„ ๊บผ๋‚ธ ๋’ค์— ํ•ด๋‹น ์ •์ ์˜ ์ธ์ ‘ ์ •์  ์ค‘์—์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ์„ ๋ชจ๋‘ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ 2๋ฒˆ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. BFS์˜ ์žฅ๋‹จ์  ์žฅ์  ์‹œ์ž‘ ์ •์ ์—์„œ ๋ชฉํ‘œ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ธธ์ด ๊ฒฝ๋กœ๋ฅผ ๋ณด์žฅํ•œ๋‹ค. ๋‹จ์  ๊ฒฝ๋กœ๊ฐ€ ๋งค์šฐ ๊ธธ ๊ฒฝ์šฐ, ํƒ์ƒ‰ ๊ฐ€์ง€๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋งŽ์€ ๊ธฐ์–ต ๊ณต..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ ๊ตฌํ˜„(ํŒŒ์ด์ฌ)

๋ชฉ์ฐจ DFS์˜ ๊ฐœ๋… DFS์˜ ์žฅ๋‹จ์  DFS์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ DFS์˜ ๊ตฌํ˜„ DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)์ด๋ž€? DFS(Depth-First Search) ๋˜๋Š” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๊ณ  ๋ถ€๋ฆ„ ๊ทธ๋ž˜ํ”„์—์„œ ๊นŠ์€ ๋ถ€๋ถ„์„ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ๋˜๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•จ DFS์˜ ๋™์ž‘ ๊ณผ์ • ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด ๊ทธ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๋ฅผ ๊บผ๋ƒ…๋‹ˆ๋‹ค. ๋” ์ด์ƒ 2๋ฒˆ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. DFS์˜ ์žฅ๋‹จ์  ์žฅ์  ํ˜„์žฌ ๊ฒฝ๋กœ ์ƒ์˜ ๋…ธ๋“œ๋“ค๋งŒ์„ ๊ธฐ์–ตํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ €์žฅ๊ณต๊ฐ„์˜ ์ˆ˜์š”๊ฐ€ ๋น„๊ต์  ์ ๋‹ค. ๋ชฉํ‘œ ๋…ธ๋“œ๊ฐ€ ๊นŠ์€ ๋‹จ๊ณ„์— ์žˆ์„ ๊ฒฝ์šฐ ๋‹ต์„ ๋นจ๋ฆฌ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ฆฌ๋””(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜(ํƒ์š•๋ฒ•)

๋ชฉ์ฐจ Greedy ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋… Greedy ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜ˆ์‹œ Greedy ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค ๊ทธ๋ฆฌ๋””(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€ ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ง€๊ธˆ ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ• ์ฆ‰, ์ „ํ›„ ๊ฒฐ์ •์— ๊ด€๊ณ„์—†์ด ๋‹น์‹œ "๊ฐ€์žฅ ์ตœ๊ณ "๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ๊ฒƒ์„ ์„ ํƒํ•ด์„œ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ MST(์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ) ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‰ฌ์šด ์˜ˆ์‹œ ์ ์›์ด ๊ณ„์‚ฐ์„ ๋งˆ์น˜๊ณ  ๊ฑฐ์Šค๋ฆ„๋ˆ์„ ๋Œ๋ ค์ฃผ๋Š” ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค. ์นด์šดํ„ฐ์—๋Š” ๊ฑฐ์Šค๋ฆ„๋ˆ์œผ๋กœ ์‚ฌ์šฉํ•  500์›, 100์›, 50์›, 10์›์งœ๋ฆฌ ๋™์ „์ด ์ถฉ๋ถ„ํžˆ ๋งŽ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์†๋‹˜์—๊ฒŒ N์›์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•  ๋•Œ, ์ตœ์†Œ ๊ฐœ์˜ ๋™์ „์œผ๋กœ ๊ฑฐ์Šค๋ฆ„ ๋ˆ์„ ์ค„ ๋ฐฉ๋ฒ•์„ ๊ตฌํ•˜์„ธ์š”. ๋‹จ, ๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•  ๋ˆ N์€ ํ•ญ์ƒ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] MST(Minimum Spanning Tree, ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ) - Prim(ํ”„๋ฆผ), Kruskal(ํฌ๋ฃจ์Šค์นผ) ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ์ฐจ Spanning Tree ๊ฐœ๋… MST(์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ) ๊ฐœ๋… Prim's Algorithm Kruskal's Algorithm Spanning Tree (์‹ ์žฅ ํŠธ๋ฆฌ) ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ์ •์ ๋“ค์„ ํฌํ•จํ•˜๋Š” ๊ทธ๋ž˜ํ”„์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ(subgraph) Tree ์ตœ์†Œํ•œ์˜ ๊ฐ„์„ ๋“ค๋กœ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จ - ๋”ฐ๋ผ์„œ Spanning Tree๋Š” cycle์„ ํฌํ•จํ•˜์ง€ ์•Š์Œ - ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ์ •์ ์˜ ์ˆ˜๊ฐ€ n๊ฐœ์ด๋ฉด, Spanning Tree๋Š” (n-1) ๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง ํ•œ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Spanning Tree๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ MST (Minimum Spanning Tree, ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ) ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„(weighted graph)์—์„œ ์ตœ์†Œ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง„ Spanning Tree ์ฆ‰, ํ•œ ๊ทธ๋ž˜ํ”„ ๋‚ด..