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

๐Ÿ“š Algorithm

(60)
์•Œ๊ณ ๋ฆฌ์ฆ˜ - Sort ์ •๋ ฌ (Merge sort, Quick sort), Python ์ฝ”๋“œ Merge Sort (๋ณ‘ํ•ฉ์ •๋ ฌ) - ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ ์ด ์ •๋ ฌ์€ ์•ˆ์ •์ •๋ ฌ์— ์†ํ•˜๋ฉฐ, ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์˜ ํ•˜๋‚˜์ด๋‹ค. - ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋ฌธ์ œ๋ฅผ ์ž‘์€ 2๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ๊ฐ์„ ํ•ด๊ฒฐํ•œ ๋‹ค์Œ, ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„์„œ ์›๋ž˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ „๋žต์ด๋‹ค. ๋Œ€๊ฐœ ์ˆœํ™˜ํ˜ธ์ถœ์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. - ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‘ ๊ฐœ์˜ ๊ท ๋“ฑํ•œ ํฌ๊ธฐ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ๋ถ„ํ• ๋œ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•œ ๋‹ค์Œ, ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ฉํ•˜์—ฌ ์ „์ฒด๊ฐ€ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. - ๋ถ„ํ• (Divide): ์ž…๋ ฅ ๋ฐฐ์—ด์„ ๊ฐ™์€ ํฌ๊ธฐ์˜ 2๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฐฐ์—ด๋กœ ๋ถ„ํ• ํ•œ๋‹ค. - ์ •๋ณต(Conquer): ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•œ๋‹ค. ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ž‘์ง€ ์•Š์œผ๋ฉด ์ˆœํ™˜ ํ˜ธ์ถœ ์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋ถ„ํ•  ์ •๋ณต ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•œ๋‹ค. - ๊ฒฐํ•ฉ(Com..
์•Œ๊ณ ๋ฆฌ์ฆ˜ - Sort ์ •๋ ฌ (Selection sort, Insertion sort, Bubble sort), Python ์ฝ”๋“œ Sort (์ •๋ ฌ) n๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ธฐ์ค€์— ๋งž๊ฒŒ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ Sort ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๋ฅ˜ Selection sort Insertion sort Bubble sort Merge sort Quick sort ๊ธฐ์ดˆ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‰๊ท ์ ์œผ๋กœ O(n^2)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - Selection sort (์„ ํƒ์ •๋ ฌ) - Insertion sort (์‚ฝ์ž…์ •๋ ฌ) - Bubble sort (๋ฒ„๋ธ”์ •๋ ฌ) ๊ณ ๊ธ‰ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‰๊ท ์ ์œผ๋กœ O(nlogn)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - Merge sort (๋ณ‘ํ•ฉ์ •๋ ฌ) - Quick sort (ํ€ต์ •๋ ฌ) - Heap sort (ํž™์ •๋ ฌ) Selection sort (์„ ํƒ์ •๋ ฌ) - ์ œ์ž๋ฆฌ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ํ•ด๋‹น ์ˆœ..
์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(Minimum Spanning Tree), ํฌ๋ฃจ์Šค์นผ(Kruskal), ํ”„๋ฆผ(Prim) Python ์ฝ”๋“œ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ (MST) MST : Minimum Spanning Tree ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์†Œ ๋น„์šฉ์˜ Spanning Tree๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ ์‹ ์žฅ ํŠธ๋ฆฌ (Spanning Tree) ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จํ•˜๋Š” ํŠธ๋ฆฌ ๊ทธ๋ž˜ํ”„์˜ ์ตœ์†Œ ์—ฐ๊ฒฐ ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„ ์ด๋‹ค. ์ตœ์†Œ ์—ฐ๊ฒฐ์ด๋ž€, ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๊ฒƒ์ด๋‹ค. Spanning Tree์˜ ํŠน์ง• - DFS, BFS์„ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์—์„œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค - ํ•˜๋‚˜์˜ ๊ทธ๋ž˜ํ”„์—๋Š” ๋งŽ์€ ์‹ ์žฅ ํŠธ๋ฆฌ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. - Spanning Tree๋Š” ํŠธ๋ฆฌ์˜ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์ด๋ฏ€๋กœ ๋ชจ๋“  ์ •์ ๋“ค์ด ์—ฐ๊ฒฐ ๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๊ณ  ์‚ฌ์ดํด์„ ํฌํ•จํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. MST (Minimum Spanning Tree) ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋˜, ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ๊ฐ„์„ ์˜..
์•Œ๊ณ ๋ฆฌ์ฆ˜ - DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) / BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) Python ์ฝ”๋“œ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๊ธฐ๋ฒ• ๊ทธ๋ž˜ํ”„ : ์ •์ (node)์™€ ๊ทธ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (edge)์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๊ณ , ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ฐจ๋ก€๋Œ€๋กœ ๋ชจ๋“  ์ •์ ๋“ค์„ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. DFS(Depth First Search) : ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ BFS(Breadth First Search) : ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ DFS(Depth First Search) ์ตœ๋Œ€ํ•œ ๊นŠ์ด ๋‚ด๋ ค๊ฐ„ ๋’ค, ๋” ์ด์ƒ ๊นŠ์ด ๊ฐˆ ๊ณณ์ด ์—†์„ ๊ฒฝ์šฐ ์˜†์œผ๋กœ ์ด๋™ 1. ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ด ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•จ 2. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)์ด ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)๋ณด๋‹ค ์ข€ ๋” ๊ฐ„๋‹จํ•จ 3. ๊ฒ€์ƒ‰ ์†๋„ ์ž์ฒด๋Š” ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์— ๋น„ํ•ด์„œ๋Š” ๋Š๋ฆผ ์ ์šฉ : ๋ฏธ๋กœ, ๊ธธ ์ฐพ๊ธฐ, ๊ฒฝ๋กœ์˜ ํŠน์ง•์„ ์ €์žฅํ•ด์•ผ ํ•˜๋Š”..
์•Œ๊ณ ๋ฆฌ์ฆ˜ - Binary Search Tree / Tree (์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ, ํŠธ๋ฆฌ, ์ด์ง„ ํŠธ๋ฆฌ, Python ์ฝ”๋“œ) ํŠธ๋ฆฌ (Tree) ํŠธ๋ฆฌ (Tree)๋ž€ ๋…ธ๋“œ๋“ค์ด ๋‚˜๋ฌด ๊ฐ€์ง€์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ๋œ ๋น„์„ ํ˜• ๊ณ„์ธต์  ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํŠธ๋ฆฌ๋Š” ํŠธ๋ฆฌ ๋‚ด์— ๋‹ค๋ฅธ ํ•˜์œ„ ํŠธ๋ฆฌ๊ฐ€ ์žˆ๊ณ  ๊ทธ ํ•˜์œ„ ํŠธ๋ฆฌ ์•ˆ์—๋Š” ๋˜ ๋‹ค๋ฅธ ํ•˜์œ„ ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์žฌ๊ท€์  ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํŠธ๋ฆฌ (Tree)์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด - ๋…ธ๋“œ (Node) ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ ์š”์†Œ - ๊ฐ„์„  (Edge) ๋…ธ๋“œ์™€ ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„  - ๋ฃจํŠธ๋…ธ๋“œ (Root Node) ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ์ตœ์ƒ์œ„ ๋…ธ๋“œ - ๋ถ€๋ชจ๋…ธ๋“œ (Parent Node) ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ - ์ž์‹๋…ธ๋“œ (Child Node) ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ•˜์œ„ ๋…ธ๋“œ - ํ˜•์ œ๋…ธ๋“œ (Sibling Node) ๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ - ์™ธ๋ถ€ ๋…ธ๋“œ(external node, outer node), ๋‹จ๋ง ๋…ธ๋“œ (terminal node), ๋ฆฌํ”„ ..
์•Œ๊ณ ๋ฆฌ์ฆ˜ - Stack, Queue (์„ ํ˜• ํ, ์›ํ˜• ํ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ) ์Šคํƒ '๋จผ์ € ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด ๋‚˜์ค‘์— ๋‚˜์˜ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ' Last In First Out (LIFO) ๊ตฌ์กฐ์ด๋‹ค. ์Šคํƒ์€ ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์Šคํƒ์˜ ๊ตฌ์„ฑ - ์ƒ๋‹จ (top) : ์Šคํƒ์—์„œ ์ œ์ผ ๋‚˜์ค‘์— ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜ - ํ•˜๋‹จ (bottom) : ์Šคํƒ์—์„œ ์ œ์ผ ๋จผ์ € ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜ - ์š”์†Œ (element) : ์Šคํƒ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ทธ ์ž์ฒด - ๊ณต๋ฐฑ (empty stack) : ์•„๋ฌด๋Ÿฐ ๋ฐ์ดํ„ฐ๋„ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์€ ์Šคํƒ ์Šคํƒ์˜ ์—ฐ์‚ฐ push() : ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. pop() : ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค. is_empty(s) : ์Šคํƒ์ด ๊ณต๋ฐฑ์ƒํƒœ์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. is_full(s) : ์Šคํƒ์ด ํฌํ™”์ƒํƒœ์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. create() : ์Šคํƒ์„ ์ƒ์„ฑํ•œ๋‹ค. peek(s) : ์š”์†Œ๋ฅผ ์Šคํƒ..

728x90