๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ž๋ฃŒ๊ตฌ์กฐ (3)

Hey Tech

์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete Binary Tree) ์ž๋ฃŒ๊ตฌ์กฐ ์ดํ•ด

๋ณธ ํฌ์ŠคํŒ…์—์„œ๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete Binary Tree) ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. * ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete Binary Tree) ์ž๋ฃŒ๊ตฌ์กฐ๋ž€? ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋ž€ ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ 2๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š” ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ์„œ ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์™„์ „ํžˆ ์ฑ„์›Œ์ ธ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ตœํ•˜๋‹จ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋Š” ์ขŒ์ธก๋งŒ ๋…ธ๋“œ๊ฐ€ ์ฑ„์›Œ์ ธ ์žˆ๊ฑฐ๋‚˜ ์ขŒ์ธก๊ณผ ์šฐ์ธก ๋ชจ๋‘ ์ฑ„์›Œ์ ธ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ๋Š” ์ตœํ•˜๋‹จ ์ขŒ์ธก ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์‚ฝ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ 1 ์ฐธ๊ณ ). ๊ทธ๋ฆผ 1 ์šฐ์ธก ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ 12์˜ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์šฐ์ธก์—๋งŒ ์‚ฝ์ž…๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํฌ์ŠคํŒ… ๋‚ด์šฉ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์˜ค๋Š˜๋„ ๊ฑด๊ฐ•ํ•œ ํ•˜๋ฃจ ๋ณด๋‚ด์‹œ๊ธธ..

[์ž๋ฃŒ๊ตฌ์กฐ] ํž™(Heap) ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!(+Python ๊ตฌํ˜„)

๐Ÿ“š ๋ชฉ์ฐจ 1. ํž™ ์ž๋ฃŒ๊ตฌ์กฐ 2. ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ? 3. ํž™ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜ 4. ํž™ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋™์ž‘ ๊ณผ์ •(์ตœ์†Œ ํž™) 4.1. ๋ฐ์ดํ„ฐ ์‚ฝ์ž… 4.2. ๋ฐ์ดํ„ฐ ์‚ญ์ œ 5. ํž™ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„(Python) 5.1. heapq ์…‹์—… 5.2. ํž™ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…(heappush) 5.3. ํž™ ๋ฐ์ดํ„ฐ ์‚ญ์ œ(heappop) 5.4. ๋ฆฌ์ŠคํŠธ๋ฅผ ํž™์œผ๋กœ ๋ณ€๊ฒฝ(heapify) 1. ํž™ ์ž๋ฃŒ๊ตฌ์กฐ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ฐ€์žฅ ๋†’์€(ํ˜น์€ ๊ฐ€์žฅ ๋‚ฎ์€) ์šฐ์„ ์ˆœ์œ„(e.g., ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’)๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ *์™„์ „ ์ด์ง„ํŠธ๋ฆฌ(Complete Binary Tree) ๊ธฐ๋ฐ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ๋†’์€(๋˜๋Š” ๊ฐ€์žฅ ๋‚ฎ์€) ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๊ฐ€ ํ•ญ์ƒ ๋ฃจํŠธ ๋…ธ๋“œ(root node)์— ์˜ค๋Š” ๊ฒŒ ํŠน์ง•์ž…๋‹ˆ๋‹ค. * ์™„..

์Šคํƒ(Stack) ์ž๋ฃŒ๊ตฌ์กฐ ์ดํ•ด(+ Python)

๋ณธ ํฌ์ŠคํŒ…์—์„œ๋Š” ์Šคํƒ(Stack) ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ๐Ÿ“š ๋ชฉ์ฐจ 1. ์Šคํƒ(Stack) ์ž๋ฃŒ๊ตฌ์กฐ๋ž€? 2. ์Šคํƒ ๋™์ž‘ ์˜ˆ์‹œ 3. ์Šคํƒ ๊ตฌํ˜„(Python) 1. ์Šคํƒ(Stack) ์ž๋ฃŒ๊ตฌ์กฐ๋ž€? ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋Šฆ๊ฒŒ ๋‚˜๊ฐ€๋Š” ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ์„œ ์„ ์ž…ํ›„์ถœ(ๅ…ˆๅ…ฅๅพŒๅ‡บ) ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์•„๋ž˜์˜ ๊ทธ๋ฆผ 1 ๊ณผ ๊ฐ™์ด ์ž…๊ตฌ์™€ ์ถœ๊ตฌ๊ฐ€ ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ "๋ฐ•์Šค ์Œ“๊ธฐ"๋ฅผ ์—ฐ์ƒํ•˜์‹œ๋ฉด ๊ธฐ์–ตํ•˜๊ธฐ ํŽธํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์•„๋ž˜ 2๊ฐ€์ง€ ํ•ต์‹ฌ์ ์ธ ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์‚ฝ์ž…(Push) ๋ฐ์ดํ„ฐ ์‚ญ์ œ(Pop) ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Overflow)์™€ ์–ธ๋”ํ”Œ๋กœ์šฐ(Underflow) ๋ฐœ์ƒ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ: ์–ด๋– ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ดˆ..