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

Data Structure๐Ÿงถ5

์œ„์ƒ ์ •๋ ฌ Topological Sort ์œ„์ƒ ์ •๋ ฌ ์œ„์ƒ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์œ„์ƒ : incoming edge) ์ผ์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์„๋•Œ ๋งŽ์ด ์“ฐ์ธ๋‹ค. ์œ„์ƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŠน์ง• DAG(direct acycle graph)์—์„œ ๊ฐ€๋Šฅํ•œ ์ •๋ ฌ ๋ฐฉ๋ฒ•์ด๋‹ค. ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์œ„์ƒ ์ •๋ ฌ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์—†๋‹ค. ์˜์กด์„ฑ์ด ์—†๋Š” ๋…ธ๋“œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์˜์กด์„ฑ ๋†’์€ ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. * ์‹œ๊ฐ„ ๋ณต์žก๋„ O(V+E) ์œ„์ƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆœ์„œ ๊ฐ vertex์˜ ์œ„์ƒ(incoming edge์ˆ˜)๋ฅผ ์ €์žฅํ•œ๋‹ค. ์œ„์ƒ์ด 0์ธ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด ๋ชจ๋‘ queue์— ๋„ฃ๋Š”๋‹ค. queue์—์„œ node๋ฅผ ๊บผ๋‚ด ์œ„์ƒ ์ •๋ ฌ์— ๋„ฃ์–ด์ค€๋‹ค. ์œ„์ƒ ์ •๋ณด๋ฅผ ํ•˜๋‚˜ ๋‚ฎ์ถ”๊ณ  ์—ฃ์ง€๋ฅผ ์—†์•ค๋‹ค. ์œ„์ƒ์ด 0์ด ๋œ ๋…ธ๋“œ๋“ค์„ ํ์— ์ €์žฅํ•œ๋‹ค. ๋ฐ˜๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜ˆ์‹œ ์œ„์ƒ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ด๋ ‡๊ฒŒ ๋˜์–ด .. 2021. 6. 13.
๊ทธ๋ž˜ํ”„ ์ด๋ก  - DFS์™€ BFS ์„ ํ˜• ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ๋น„์„ ํ˜• ๊ตฌ์กฐ ํƒ์ƒ‰ ์œ„ํ•ด์„  ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)๊ณผ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์€ ๋ธŒ๋ฃจํŠธ ํฌ์Šค์™€ ๊ด€๋ จ์ด ๊นŠ๊ณ  ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์€ ๋ฐฑํŠธ๋ž˜ํ‚น๊ณผ ๊ด€๋ จ์ด ๊นŠ๋‹ค. DFS ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์  ๋ฐฉ๋ฌธ ๋ง‰ํžŒ ์ •์ ์— ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ํ•œ ๋’ค๋กœ ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š”๋‹ค ์ฆ‰ ๋” ๋”ฐ๋ผ๊ฐˆ ๊ฐ„์„ ์ด ์—†์„ ๊ฒฝ์šฐ ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ง€๊ธˆ๊นŒ์ง€ ๊ฑฐ์ณ ์˜จ ์ •์  ๋ชจ๋‘ ์ €์žฅ ํ•ด ๋‘ฌ์•ผ ํ•˜๋Š”๋ฐ ์žฌ๊ท€ ํ˜ธ์ถœ ์ด์šฉํ•˜๋ฉด ์ด ๊ฐ™์€ ์ผ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์žฌ๊ท€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒํ•˜๋ฉด ํ˜ธ์ถœํ•œ ์œ„์น˜๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. DFS ํŠน์ง• ๋ฐฉ๋ฌธํ•œ ์ •์ ์„ ์•Œ์•„์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ์ •์ ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ•„์š” ๋”์ด์ƒ ๋ฐฉ๋ฌธํ•  ์ •์ ์ด ์—†์œผ๋ฉด ์ด์ „ ์ •์ ์œผ๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•œ๋‹ค -> ์žฌ๊ท€, stack ์ด์šฉ ๊ทธ๋ž˜.. 2021. 4. 21.
LCS ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด DP ๐Ÿ”˜์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด ์ด๋ž€? (LCS, Longest Common Subsequence) ๋‘๊ฐœ์˜ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ณตํ†ต์œผ๋กœ ๋“ค์–ด ์žˆ๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ์ˆ˜์—ด์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ABCDE์™€ ACDFG์ด ์ฃผ์–ด์กŒ๋‹ค๋ฉด ๋‘ ๋ฌธ์ž์—ด์˜ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด์€ {A}, {C}, {D}, {AC}, {AD}, {ACD} ์ด๊ณ  LCS๋Š” ๋ฐ”๋กœ {ACD}๋ฅผ ๋งํ•œ๋‹ค. - LCS์™€ LCS (์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด๊ณผ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด) ์‚ฌ์‹ค LCS๋Š” ๋œป์ด ๋‘๊ฐ€์ง€๋‹ค ..! LCS( Longest Common Subsequence) ์ด ์žˆ๊ณ  ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ดLCS( Longest Common Substring) ์ด ์žˆ๋‹ค. ์œ„ ๋‘ ๋ฌธ์ž์—ด ABCDE์™€ ACDFG์— ๋Œ€ํ•ด์„œ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด๋Š” {ACD}์ง€๋งŒ ์ตœ์žฅ ๊ณตํ†ต .. 2021. 3. 1.
๊ทธ๋ž˜ํ”„ ์ด๋ก  - ์ด๋ถ„ ๊ทธ๋ž˜ํ”„ ๐Ÿ”˜์ด๋ถ„ ๊ทธ๋ž˜ํ”„๋ž€ ? ์ธ์ ‘ํ•œ ์ •์ ๋ผ๋ฆฌ ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ์น ํ•ด์„œ ๋ชจ๋“  ์ •์ ์„ ๋‘๊ฐ€์ง€ ์ƒ‰์œผ๋กœ๋งŒ ์น ํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์ ์ด ๋‘ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ ์ง€๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ๊ทธ๋ฃน์˜ ์ •์ ์ด ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์ ธ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ โžฟ์ด๋ถ„ ๊ทธ๋ž˜ํ”„ ํŠน์ง• ์ด๋ถ„ ๊ทธ๋ž˜ํ”„์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ BFS, DFS ํƒ์ƒ‰์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ถ„ ๊ทธ๋ž˜ํ”„๋Š” BFS๋ฅผ ํ•  ๋•Œ ๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ์ •์ ๋ผ๋ฆฌ๋Š” ๋ฌด์กฐ๊ฑด ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์น ํ•ด์ง„๋‹ค. ์—ฐ๊ฒฐ ์„ฑ๋ถ„์˜ ๊ฐœ์ˆ˜(Connected Component)๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌํ•˜๋‹ค. ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋ฉฐ ๊ฐ„์„ ์„ ๊ฒ€์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(V+E)๋กœ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™๋‹ค. โ˜‘๏ธ์ด๋ถ„ ๊ทธ๋ž˜ํ”„ ํŒ๋ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„œ๋กœ ์ธ์ ‘ํ•œ ์ •์ ์ด ๊ฐ™์€ ์ƒ‰์ด๋ฉด ์ด๋ถ„ ๊ทธ๋ž˜ํ”„๊ฐ€ ์•„๋‹ˆ๋‹ค. BFS, DFS ๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์ •์  ๋ฐฉ๋ฌธ ํ•  ๋•Œ๋งˆ๋‹ค ๋‘.. 2021. 2. 25.
์ •๋ ฌ - ์„ ํƒ, ๋ฒ„๋ธ”, ์‚ฝ์ž…, ๋ณ‘ํ•ฉ, ํž™, ํ€ต 1. ์„ ํƒ ์ •๋ ฌ(Selection sort) -> O(n^2) ์— ๋Œ€ํ•ด i = 0 k= n -1, min ๊ฐ’์„ ์ฐพ์•„ i ์ž๋ฆฌ์™€ swap ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊นŒ์ง€ ๋Œ๋ฉด์„œ ๋น„๊ต ์ฝ”๋“œ : void selectionSort(int arr[], int size){ int minIndex; int i, j; for(int i = 0; i O(n^2) ํ˜„์žฌ ๋ฐฐ์—ด ์š”์†Œ์™€ ๋‹ค์Œ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๋น„๊ตํ•˜๊ณ  ๊ตํ™˜ํ•˜๋Š” ์‹์˜ ์ •๋ ฌ ์ฝ”๋“œ :.. 2021. 2. 19.