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

์•Œ๊ณ ๋ฆฌ์ฆ˜ [Algorithm] - ๊ณ„์ˆ˜ ์ •๋ ฌ Counting Sort (7) (C, Python) ๊ณ„์ˆ˜ ์ •๋ ฌ ์ด๋ฒˆ์—๋Š” ๊ณ„์ˆ˜ ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๊ณ„์ˆ˜ ์ •๋ ฌ์ด๋ž€ ๋‹จ์ˆœํ•˜๊ฒŒ 'ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜'์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ณ„์ˆ˜ ์ •๋ ฌ์€ '๋ฒ”์œ„์กฐ๊ฑด'์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ํ•œํ•ด์„œ ๊ต‰์žฅํžˆ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์„ ํƒ ์ •๋ ฌ, ๋ฒ„๋ธ” ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ๋ณ‘ํ•ฉ ์ •๋ ฌ, ํž™ ์ •๋ ฌ์„ ๋ฐฐ์› ๋Š”๋ฐ ์ง€๊ธˆ ๊นŒ์ง€ ๋ฐฐ์šด ์ •๋ ฌ ์ค‘ ๊ฐ€์žฅ ๋น ๋ฅธ ์ •๋ ฌ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฅด๋ผ๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N*log N)์„ ๊ฐ€์ง€๋Š” ํ€ต ์ •๋ ฌ, ๋ณ‘ํ•ฉ ์ •๋ ฌ, ํž™ ์ •๋ ฌ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅผ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ๋ ๊นŒ? ๊ณ„์ˆ˜ ์ •๋ ฌ์€ ๋ฒ”์œ„๊ฐ€ ์ฃผ์–ด์ ธ์žˆ๋‹ค๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„ O(N)์˜ ์†๋„๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ๊ณ , ๊ฐฏ์ˆ˜๋งŒํผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ๋น ๋ฅด๋‹ค. ๋‹ค์Œ์˜ 5 ์ดํ•˜ ์ž์—ฐ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์„ธ..
์•Œ๊ณ ๋ฆฌ์ฆ˜ [Algorithm] - ํž™ ์ •๋ ฌ Heap Sort(6) (C,Python) ํž™์ •๋ ฌ ์ด๋ฒˆ์—๋Š” ํž™ ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ํž™์ •๋ ฌ์ด๋ž€ ํž™ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋Š” ์ •๋ ฌ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„  ๋จผ์ € ํž™(Heap)๊ตฌ์กฐ๋ฅผ ์•Œ์•„์•ผํ•˜๊ณ , ํž™์„ ์•Œ๊ธฐ ์ด์ „์—๋Š” ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ด์ง„ ํŠธ๋ฆฌ(binary tree)๋Š” ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ๊ฐ ์™ผ์ชฝ์ž์‹ ๋…ธํŠธ์™€ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ ๋ผ๊ณ  ํ•œ๋‹ค. (์ถœ์ฒ˜ : https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%A7%84_%ED%8A%B8%EB%A6%AC) ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฃจํŠธ(Root) ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ž์‹๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ, ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์กฐ์˜ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค. ์ฆ‰ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋Š” ์ด์ง„ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๊ฐ€ ์ค‘..
์•Œ๊ณ ๋ฆฌ์ฆ˜ [Algorithm] - ๋ณ‘ํ•ฉ ์ •๋ ฌ Merge Sort(5) (C,Python) ๋ณ‘ํ•ฉ์ •๋ ฌ ์ด๋ฒˆ์—๋Š” ๋ณ‘ํ•ฉ ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๋ณ‘ํ•ฉ์ •๋ ฌ๋„ ํ€ต์ •๋ ฌ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋Œ€ํ‘œ์ ์ธ '๋ถ„ํ• ์ •๋ณต' ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ€ต ์ •๋ ฌ๊ณผ ๋™์ผํ•˜๊ฒŒ O(N * logN)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ๋‹ค๋งŒ ํ€ต ์ •๋ ฌ์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€์ง€๋งŒ, ๋ณ‘ํ•ฉ์ •๋ ฌ์€ ์ •ํ™•ํžˆ ๋ฐ˜์ ˆ์”ฉ ๋‚˜๋ˆˆ๋‹ค๋Š” ์ ์—์„œ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(N*logN)์„ ๋ณด์žฅํ•œ๋‹ค. ๋‹ค์Œ์˜ ์ˆซ์ž๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”. 7 6 5 8 3 5 9 1 ๋ณ‘ํ•ฉ์ •๋ ฌ์€ ํ•˜๋‚˜์˜ ํฐ ๋ฌธ์ œ๋ฅผ ๋‘๊ฐœ์˜ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•œ ๋’ค์— ๊ฐ์ž ๊ณ„์‚ฐํ•˜๊ณ  ๋‚˜์ค‘์— ํ•ฉ์น˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ•œ๋‹ค. ์ฆ‰ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š” ์ผ๋‹จ ์ •ํ™•ํžˆ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜์ค‘์— ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ€ต ์ •๋ ฌ๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ”ผ๋ฒ— ๊ฐ’์ด ์—†๊ณ  ํ•ญ์ƒ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๊ณ , ๋•Œ๋ฌธ์— ๋‹จ..
์•Œ๊ณ ๋ฆฌ์ฆ˜ [Algorithm] - ํ€ต ์ •๋ ฌ (4) (C, Python) ํ€ต ์ •๋ ฌ ์ด๋ฒˆ์—๋Š” ํ€ต ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ํ€ต ์ •๋ ฌ์ด๋ž€ ๋Œ€ํ‘œ์ ์ธ '๋ถ„ํ•  ์ •๋ณต'์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ‰๊ท  ์†๋„๊ฐ€ O(N*logN)์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ด์ „์— ๋ฐฐ์› ๋˜ ์„ ํƒ ์ •๋ ฌ, ๋ฒ„๋ธ” ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๊ฐ€ 10๋งŒ๊ฐœ๊ฐ€ ๋„˜์–ด๊ฐ€๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ ๋งค์šฐ ์–ด๋ ค์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋”์šฑ ๋น ๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•˜๊ณ  ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ€ต ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋‹ค์Œ์˜ ์ˆซ์ž๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”. 1 10 5 8 7 6 4 3 2 9 ํ€ต ์ •๋ ฌ์€ ํ•˜๋‚˜์˜ ํฐ ๋ฌธ์ œ๋ฅผ ๋‘๊ฐœ์˜ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜๋Š” ์‹์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด ํŠน์ •ํ•œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํฐ ์ˆซ์ž์™€ ์ž‘์€ ์ˆซ์ž๋ฅผ ์„œ๋กœ ๊ตํ™˜ํ•œ ๋’ค์— ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ๋ณด์ž. ํ€ต ์ •๋ ฌ์—๋Š” ๊ธฐ์ค€ ๊ฐ’์ด ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋ฅผ ํ”ผ๋ฒ—(Pivot)์ด๋ผ๊ณ ๋„ ํ•˜..