๋ชฉ๋กDEV_IN/Algorithm (13)

let's get IT with DAVINA ๐Ÿ’ป

์ž๋ฃŒ๊ตฌ์กฐ/๋น„์„ ํ˜•๊ตฌ์กฐ/๊ทธ๋ž˜ํ”„

Graph๋ž€? ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ ๋“ค์ด ์„œ๋กœ ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ๋ชฉ์  โ–ท ๊ทธ๋ž˜ํ”„์˜ ํƒ์ƒ‰์€ ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์ ๋“ค์„ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธ(ํƒ์ƒ‰)ํ•˜๋Š” ๊ฒƒ! ๊ทธ๋ž˜ํ”„์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ์ž๋ฃŒ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด, ํ•˜๋‚˜์”ฉ ๋ชจ๋‘ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•จ ๋ฐฉ์‹ โ–ท BFS & DFS Graph์˜ ๊ตฌ์กฐ ์ง์ ‘์ ์ธ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋‘ ์  ์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ์„ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„์ ‘์ ์ธ ๊ด€๊ณ„๋ผ๋ฉด, ๋ช‡ ๊ฐœ์˜ ์ ๊ณผ ์„ ์— ๊ฑธ์ณ ์ด์–ด์ง‘๋‹ˆ๋‹ค Graph terms ์ •์  (vertex) ๋…ธ๋“œ(node)๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ทธ๋ž˜ํ”„์˜ ๊ธฐ๋ณธ ์›์†Œ ๊ฐ„์„  (edge) ์ •์  ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. (์ •์ ์„ ์ด์–ด์ฃผ๋Š” ์„ ) ์ธ์ ‘ ์ •์  (adjacent vertex) ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ๊ฐ„์„ ์— ์˜ํ•ด ์ง..

DEV_IN/Algorithm 2023. 2. 23. 02:47
์ž๋ฃŒ๊ตฌ์กฐ/๋น„์„ ํ˜•๊ตฌ์กฐ/ํŠธ๋ฆฌ

Tree ๋ž€? ๋‹จ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ํ•œ ๊ตฌ์กฐ ํ•˜๋‚˜์˜ ๋ฟŒ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๊ฐ€์ง€๊ฐ€ ์‚ฌ๋ฐฉ์œผ๋กœ ๋ป—์€ ํ˜•ํƒœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋กœ ์•„๋ž˜์— ์žˆ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ์— ํ•œ ๊ฐœ์˜ ๊ฒฝ๋กœ์™€ ํ•˜๋‚˜์˜ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์—ฐ๊ฒฐ๋œ ๊ณ„์ธต์  ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜์—ด์‹œํ‚จ ์„ ํ˜• ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ, ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์•„๋ž˜์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋น„์„ ํ˜• ๊ตฌ์กฐ ํŠธ๋ฆฌ๊ตฌ์กฐ๋Š” ๊ณ„์ธต์ ์œผ๋กœ ํ‘œํ˜„์ด ๋˜๊ณ , ์•„๋ž˜๋กœ๋งŒ ๋ป—์–ด๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ดํด(cycle)์ด ์—†์Šต๋‹ˆ๋‹ค. → ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„(Connected Graph) ์‚ฌ์ดํด - ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•ด ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ๋‹ค์‹œ ์‹œ์ž‘ ๋…ธ๋“œ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒƒ Tree์˜ ๊ตฌ์กฐ์™€ ํŠน์ง• Root ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์‹œ์ž‘์ ์ด ๋˜๋Š” ๋…ธ๋“œ Node ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋Š” ๋ชจ๋“  ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ Parent Node (๋ถ€๋ชจ ๋…ธ๋“œ) ๋‘ ๋…ธ๋“œ๊ฐ€ ์ƒํ•˜๊ด€๊ณ„๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„..

DEV_IN/Algorithm 2023. 2. 23. 01:55
[์ž๋ฃŒ๊ตฌ์กฐ/์„ ํ˜•๊ตฌ์กฐ]ํ

Queue๋ž€? Definition ์ค„์„ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๋‹ค, ๋Œ€๊ธฐํ–‰๋ ฌ ๊ฐ€์žฅ ๋จผ์ € ์ง„์ž…ํ•œ ์ž๋™์ฐจ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ํ†จ๊ฒŒ์ดํŠธ๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ง„์ž…ํ•œ ์ž๋™์ฐจ๋Š” ๋จผ์ € ๋„์ฐฉํ•œ ์ž๋™์ฐจ๊ฐ€ ๋ชจ๋‘ ๋น ์ ธ๋‚˜๊ฐ€๊ธฐ ์ „๊นŒ์ง€๋Š” ํ†จ๊ฒŒ์ดํŠธ๋ฅผ ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Stack๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์œผ๋กœ, FIFO(First In First Out)/LILO(Last In Last Out)์˜ ํŠน์ง•์„ ๊ฐ€์ง ํ‹ฐ์ผ“์„ ์‚ฌ๋ ค๊ณ  ์ค„์„ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ชจ์Šต๊ณผ ํก์‚ฌํ•œ ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์˜ ๋ฐฉํ–ฅ์ด ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋‘ ๊ณณ์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Queue์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ ‘enqueue’, ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ์„ ‘dequeue’๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ! ํ์˜ ์„ฑ์งˆ ์›์†Œ์˜ ์ถ”๊ฐ€ → O(1) ์›์†Œ์˜ ์ œ๊ฑฐ → O(1) ..

DEV_IN/Algorithm 2023. 2. 22. 21:58
[์ž๋ฃŒ๊ตฌ์กฐ/์„ ํ˜•๊ตฌ์กฐ]์Šคํƒ

Stack ์ด๋ž€? Definition ์Œ“๋‹ค, ์Œ“์ด๋‹ค, ํฌ๊ฐœ์ง€๋‹ค → ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์Œ“๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ๊ณจ๋ชฉ์€ ์ž๋ฃŒ๊ตฌ์กฐ Stack / ์ž๋™์ฐจ๋Š” ๋ฐ์ดํ„ฐ(Data) ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ„ ์ž๋™์ฐจ๋Š” ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ณ , ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์ž๋™์ฐจ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ Stack์˜ ํŠน์ง•์€ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ํ•˜๋‚˜์˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ์ œํ•œ์  ์ ‘๊ทผ์— ์žˆ๋‹ค. ์ด๋Ÿฐ Stack ์ž๋ฃŒ๊ตฌ์กฐ ์ •์ฑ…์„ LIFO(Last In First Out) / FILO (First In Last Out)์ด๋ผ ๋ถ€๋ฅธ๋‹ค. Stack์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ ‘PUSH’, ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ์„ ‘POP’์ด๋ผ๊ณ  ํ•œ๋‹ค. ์Šคํƒ์˜ ์„ฑ์งˆ ์›์†Œ์˜ ์ถ”๊ฐ€ → O(1) ์›์†Œ์˜ ์ œ๊ฑฐ → O(1) ์ œ์ผ ์ƒ๋‹จ์˜ ์›์†Œ ํ™•์ธ → O(1) ์ œ์ผ ์ƒ๋‹จ์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์›์†Œ..

DEV_IN/Algorithm 2023. 2. 22. 21:29
์ž๋ฃŒ๊ตฌ์กฐ๋ž€?

์ž๋ฃŒ๊ตฌ์กฐ๋ž€? ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ์˜ ๋ฌถ์Œ์„ ์ €์žฅํ•˜๊ณ , ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ์ดํ„ฐ - ๋ฌธ์ž, ์ˆซ์ž, ์†Œ๋ฆฌ, ๊ทธ๋ฆผ, ์˜์ƒ ๋“ฑ ์‹ค์ƒํ™œ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋ชฉ์ (ํ•„์š”)์— ๋”ฐ๋ผ ๋ถ„์„ํ•˜๊ณ  ์ •๋ฆฌํ•˜์—ฌ ํ™œ์šฉํ•ด์•ผ๋งŒ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ž๋ฃŒ์˜ ์ง‘ํ•ฉ์„ ๊ตฌ์กฐํ™”ํ•˜๊ณ , ์ด๋ฅผ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์ดˆ์ ! ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๊ธฐ์— ํŽธ๋ฆฌํ•˜๋ ค๊ณ , ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์œผ๋ ค๊ณ  ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค! ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ถ„๋ฅ˜ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠน์ง• ํŠน์ •ํ•œ ์ƒํ™ฉ์— ๋†“์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ์— ํŠนํ™” ๋งŽ์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์•Œ์•„๋‘๋ฉด, ์–ด๋– ํ•œ ์ƒํ™ฉ์ด ๋‹ฅ์ณค์„ ๋•Œ ์ ํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ ์šฉํ•˜์—ฌ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ https://www.cs.usfca.edu/~galles/visualization/Algorithms.html Data Structure Visuali..

DEV_IN/Algorithm 2023. 2. 22. 20:43