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

๐Ÿ“š Computer Science/Algorithm8

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ทธ๋ž˜ํ”„(Graph) ๋…ธ๋“œ(Node)์™€ ๋…ธ๋“œ ์‚ฌ์ด์— ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ (Edge)์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐœ์ฒด(ํ˜น์€ ๊ฐ์ฒด)(Object)๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๋Š” ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋– ์˜ฌ๋ฆฌ๊ธฐ ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ์ธ์ ‘ ํ–‰๋ ฌ(Adjacency Matrix) : 2์ฐจ์› ๋ฐฐ์—ด ์‚ฌ์šฉ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋งŽ์ด ํ•„์š”ํ•˜์ง€๋งŒ ํŠน์ • ๋…ธ๋“œ ๊ฐ„ ๊ฐ„์„ ์˜ ๋น„์šฉ์„ O(1) ์‹œ๊ฐ„์œผ๋กœ ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ์Œ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ (Adjacency List) : ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜์ธ O(E) ๋งŒํผ๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜์ง€๋งŒ O(V) ์‹œ๊ฐ„ ์†Œ์š” ๊ทธ๋ž˜ํ”„ ํŠธ๋ฆฌ ๋ฐฉํ–ฅ์„ฑ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ํ˜น์€ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ์ˆœํ™˜์„ฑ ์ˆœํ™˜ ๋ฐ ๋น„์ˆœํ™˜ ๋น„์ˆœํ™˜ ๋ฃจํŠธ ๋…ธ๋“œ ์กด์žฌ ์—ฌ๋ถ€ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์—†์Œ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์กด์žฌ ๋…ธ๋“œ๊ฐ„ ๊ด€๊ณ„์„ฑ ๋ถ€๋ชจ์™€ ์ž์‹ ๊ด€๊ณ„ ์—†์Œ ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„.. 2022. 4. 14.
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ๋‹จ ๊ฒฝ๋กœ(Shortest Path) ์ตœ๋‹จ ๊ฒฝ๋กœ(Shortest Path) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธธ ์ฐพ๊ธฐ ๋ฌธ์ œ๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ ๊ทธ๋ž˜ํ”„๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‘œํ˜„ ๊ฐ ์ง€์ ์€ ๋…ธ๋“œ๋กœ ํ‘œํ˜„ ์ง€์ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋„๋กœ๋Š” ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ์˜ ์ข…๋ฅ˜ ๋‹จ์ผ ์ถœ๋ฐœ(single-source) ์ตœ๋‹จ ๊ฒฝ๋กœ ์–ด๋–ค ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ ๋‹จ์ผ ๋„์ฐฉ(single-destination) ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ชจ๋“  ์ •์ ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ์–ด๋–ค ํ•˜๋‚˜์˜ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๊ฐ„์„ ์„ ๋’ค์ง‘์œผ๋ฉด ๋‹จ์ผ ์ถœ๋ฐœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ฌธ์ œ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Œ ๋‹จ์ผ ์Œ(single-pair) ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ชจ๋“  ์ •์  ์Œ๋“ค ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ ์ฃผ์š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฒจ๋งŒ-ํฌ๋“œ(Bellman-Ford-Moo.. 2022. 3. 31.
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ์ปดํ“จํ„ฐ๋ฅผ ํ™œ์šฉํ•ด๋„ ์–ด๋ ค์šด ๋ฌธ์ œ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•˜๊ธฐ์— ์‹œ๊ฐ„์ด ๋งค์šฐ ๋งŽ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•˜๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋งค์šฐ ๋งŽ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ ์ปดํ“จํ„ฐ๋Š” ์—ฐ์‚ฐ ์†๋„์— ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋„ ํ•œ์ •์ ์ด๋ผ ๋งŽ์€ ์ œ์•ฝ ๋ฐœ์ƒ โ˜ž ์—ฐ์‚ฐ ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž‘์„ฑ ํ•„์š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ๋™์  ๊ณ„ํš๋ฒ• ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ๋‚˜๋ˆ„๊ณ , ๊ฐ™์€ ๋ฌธ์ œ๋ผ๋ฉด ํ•œ ๋ฒˆ์”ฉ๋งŒ ํ’€์–ด ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฒ• ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์•ฝ๊ฐ„ ๋” ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ์‚ฐ ์†๋„๋ฅผ ๋น„์•ฝ์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ์ •๋‹ต์€ ๊ทธ๊ฒƒ์„ .. 2022. 3. 30.
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ด์ง„ ํƒ์ƒ‰(Binary Search) ์ˆœ์ฐจ ํƒ์ƒ‰(Sequential Search) ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์žˆ๋Š” ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์•ž์—์„œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ• ์ •๋ ฌ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๊ฐ€์žฅ ์•ž์—์„œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ํ™•์ธ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ ๋ฆฌ์ŠคํŠธ ๋‚ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋ฌด๋ฆฌ ๋งŽ์•„๋„ ์‹œ๊ฐ„๋งŒ ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ํ•ญ์ƒ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ ์‹œ๊ฐ„ ๋ณต์žก๋„ → O(N) ์ด์ง„ ํƒ์ƒ‰(Binary Search) ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ขํ˜€๊ฐ€๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ ์ฐพ์œผ๋ ค๋Š” ๋ฐ์ดํ„ฐ์™€ ์ค‘๊ฐ„์  ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋น„๊ตํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ์ƒ‰ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‹œ์ž‘์ , ๋์ , ์ค‘๊ฐ„์  3๊ฐœ์˜ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๋ฐฐ์—ด ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‹œ๊ฐ„ ๋ณต์žก๋„ → O(logN) ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ ๋”๋ณด๊ธฐ ํŠธ๋ฆฌ(Tree) ๊ตฌ์กฐ ๋…ธ๋“œ์™€ ๋…ธ๋“œ์˜ ์—ฐ.. 2022. 3. 25.
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ(Sorting) ์ •๋ ฌ(Sorting) ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์„ ํƒ ์ •๋ ฌ(Selection Sort) ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์„ ํƒํ•ด ๋งจ ์•ž์œผ๋กœ ๋ณด๋‚ธ๋‹ค. ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์— ๋น„ํ•ด ๋น„ํšจ์œจ์ ์ด๋‹ค. → ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N^2) ์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort) ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‹ˆ์”ฉ ํ™•์ธํ•˜๋ฉฐ, ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ํšจ์œจ์ ์ด๋‹ค. → ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N^2) ํ€ต ์ •๋ ฌ(Quick Sort) ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ , ๊ทธ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พผ๋‹ค. ํ”ผ๋ฒ—(Pivot): ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ → ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„: O(NlogN) ๊ณ„์ˆ˜ ์ •๋ ฌ(Count Sort) ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๋ชจ๋‘ ๋‹ด๊ธธ .. 2022. 3. 24.
[์•Œ๊ณ ๋ฆฌ์ฆ˜] DFS/ BFS ํƒ์ƒ‰(Search): ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ • ๊ทธ๋ž˜ํ”„, ํŠธ๋ฆฌ ๋“ฑ์˜ ์ž๋ฃŒ๊ตฌ์กฐ ์•ˆ์—์„œ ํƒ์ƒ‰ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฃผ๋กœ ๋‹ค๋ฃฌ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ DFS์™€ BFS๊ฐ€ ์žˆ๋‹ค. ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ๋”๋ณด๊ธฐ ์ž๋ฃŒ๊ตฌ์กฐ(Data Struture): ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ ์Šคํƒ๊ณผ ํ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ธฐ์ดˆ ๊ฐœ๋…์œผ๋กœ ๋‹ค์Œ ๋‘ ํ•ต์‹ฌ ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์‚ฝ์ž…(Push): ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž… ์‚ญ์ œ(Pop): ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Overflow): ํŠน์ • ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๋„˜์€ ์ƒํƒœ์—์„œ ์‚ฝ์ž… ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฐœ์ƒ ์–ธ๋”ํ”Œ๋กœ์šฐ(Underflow): ํŠน์ • ์ž๋ฃŒ๊ตฌ์กฐ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์‚ญ์ œ ์—ฐ์‚ฐ ์ˆ˜ํ–‰ ์‹œ ๋ฐœ์ƒ ์Šคํƒ(Stack): ๋ฐ์ดํ„ฐ.. 2022. 3. 23.
๋ฐ˜์‘ํ˜•