์ด์ง„ํŠธ๋ฆฌ (Binary Trees)

์ด์ง„ ํŠธ๋ฆฌ๋Š” ํŠธ๋ฆฌ์— ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ 2 ์ดํ•˜์ธ ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ž์‹์ด ์—†๊ฑฐ๋‚˜ (๋ฆฌํ”„๋…ธ๋“œ์˜ ๊ฒฝ์šฐ), ํ•˜๋‚˜๋งŒ ์žˆ๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ๋‘˜ ์žˆ๋Š” ์„ธ ๊ฒฝ์šฐ ์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹นํ•œ๋‹ค. ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ถ”์ƒ์  ์ž๋ฃŒ๊ตฌ์กฐ ์—ฐ์‚ฐ์˜ ์ •์˜ size() - ํ˜„์žฌ ํŠธ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•จ depth() - ํ˜„์žฌ ํŠธ๋ฆฌ์˜ ๊นŠ์ด (๋˜๋Š” ๋†’์ด; height)๋ฅผ ๊ตฌํ•จ ์ˆœํšŒ (traversal) ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„ # ๋…ธ๋“œ ํด๋ž˜์Šค # ์ด์ง„ํŠธ๋ฆฌ์˜ ๊ตฌํ˜„ - ๋…ธ๋“œ(node) class Node: def __init__(self, item): self.data = item self.left = None self.right = None # ํŠธ๋ฆฌ ํด๋ž˜์Šค # ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ตฌํ˜„ - ํŠธ๋ฆฌ(tree) class BinaryT..

ํŠธ๋ฆฌ (Trees)

ํŠธ๋ฆฌ(tree)๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฒ€์ƒ‰๊ณผ ํƒ์ƒ‰์— ์•„์ฃผ ๋„๋ฆฌ ์ด์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ ๋˜๋Š” ๊ฒ€์ƒ‰ ์—”์ง„ ๋“ฑ์—์„œ ์•„์ฃผ ๋งŽ์ด ์ด์šฉ๋œ๋‹ค. ํŠธ๋ฆฌ๋Š” ์ˆœํ™˜ํ•˜๋Š” ๊ธธ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„(graph)์ด๊ณ , ์ •์ (node)์™€ ๊ฐ„์„ (edge)์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ฐฐ์น˜ ํ˜•ํƒœ๋ฅผ ์ถ”์ƒํ™”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํŠธ๋ฆฌ์˜ ์šฉ์–ด ์ดํ•ด ์ด์ง„ ํŠธ๋ฆฌ (binary trees) ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ 2 ์ดํ•˜์ธ ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์ด์ง„ํŠธ๋ฆฌ๋Š” ์žฌ๊ท€์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋นˆํŠธ๋ฆฌ(empty tree)์ด๊ฑฐ๋‚˜ ๋ฃจํŠธ ๋…ธ๋“œ + ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ + ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ (๋‹จ, ์ด๋•Œ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋˜ํ•œ ์ด์ง„ํŠธ๋ฆฌ)์ด๋ฉด ์ด์ง„ํŠธ๋ฆฌ์ด๋‹ค. ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ (full binary tree) ๋ชจ๋“  ๋ ˆ๋ฒจ์—์„œ์˜ ๋…ธ๋“œ๋“ค์ด ๋ชจ๋‘ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๋†’์ด๊ฐ€ K..

์šฐ์„ ์ˆœ์œ„ ํ (Priority Queues)

๊ธฐ์กด์˜ ํ๋Š” ์„ ์ž…์„ ์ถœ, ์ฆ‰ FIFO (First-In First Out)๋ฐฉ์‹์ด ์ ์šฉ์ด ๋œ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์ด ๋ฐฉ์‹์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ์›์†Œ๋“ค์˜ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ๊บผ๋‚ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์‘์šฉ ์˜ˆ๋กœ๋Š” ์šด์˜์ฒด์ œ์—์„œ CPU ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ํ˜„์žฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…๋“ค ์ค‘ ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ์„ ๊ณจ๋ผ ์‹คํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ์˜ ๊ตฌํ˜„ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ์— ์›์†Œ๋ฅผ ๋„ฃ์„ ๋•Œ (enqueueํ•  ๋•Œ) ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•ด ๋‘๋Š” ๋ฐฉ๋ฒ• ํ์—์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ผ ๋•Œ (dequeueํ•  ๋•Œ) ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ 1๋ฒˆ์ด ๋” ์œ ๋ฆฌํ•˜๋‹ค. ๋งŒ์•ฝ ํ์— ๋ฐ์ดํ„ฐ ์›์†Œ๋“ค์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ƒ๊ด€์—†์ด ๋Š˜์–ด์„œ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ..

ํ™˜ํ˜• ํ (Circular Queue)

ํ์˜ ํ™œ์šฉ ์ž๋ฃŒ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…๊ณผ ๊ทธ ์ž๋ฃŒ๋ฅผ ์ด์šฉํ•˜๋Š” ์ž‘์—…์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ(asynchronously) ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์ž๋ฃŒ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์ด ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์ž๋ฃŒ๋ฅผ ์ด์šฉํ•˜๋Š” ์ž‘์—…์ด ์—ฌ๋Ÿฌ๊ณณ์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์ž๋ฃŒ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…๊ณผ ๊ทธ ์ž๋ฃŒ๋ฅผ ์ด์šฉํ•˜๋Š” ์ž‘์—…์ด ์–‘์ชฝ ๋‹ค ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์ž๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ž๋ฃŒ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋‚˜์ค‘์— ๊ทธ ์ž๋ฃŒ๋ฅผ ๋˜ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์˜ ๊ฒฝ์šฐ ํ™˜ํ˜• ํ(Circular Queue) ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜์˜ ์ €์žฅ ๊ณต๊ฐ„์„ ๋น™ ๋Œ๋ ค๊ฐ€๋ฉฐ ์ด์šฉ ํ๊ฐ€ ๊ฐ€๋“์ฐจ๋ฉด ๋”์ด์ƒ ์›์†Œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†์œผ๋‹ˆ ํ๊ฐ€ ๊ฐ€๋“ ์ฐผ๋Š”์ง€ ๋น„์–ด์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ์˜ ๊ธธ์ด๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค. ํ™˜ํ˜• ํ์˜ ์ถ”์ƒ์  ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„ ํ™˜ํ˜• ํ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ์—๋„ ์„ ํ˜• ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ..

ํ (Queues)

๋“œ๋””์–ด ํ! ์Šคํƒ๊ณผ ๋”๋ถˆ์–ด ๋งค์šฐ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ด์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํ๋Š” ์ž๋ฃŒ(data element)๋ฅผ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ์„ ํ˜•๊ตฌ์กฐ๋กœ ์„ ํ˜•๋ฐฐ์—ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ์Šคํƒ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์Šคํƒ๊ณผ๋Š” ๋ฐ˜๋Œ€์ธ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ๋Š” ๋„ฃ์„ ๋•Œ์—๋Š” ํ•œ ์ชฝ ๋์—์„œ ๋ฐ€์–ด ๋„ฃ์–ด์•ผ(enqueue์—ฐ์‚ฐ)ํ•˜๊ณ  ๊บผ๋‚ผ ๋•Œ์—๋Š” ๋ฐ˜๋Œ€ ์ชฝ์—์„œ ๋ฝ‘์•„ ๊บผ๋‚ด๋Š”(dequeue์—ฐ์‚ฐ) ์„ ์ž…์„ ์ถœ(FIFO; First-In First-Out)์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ์˜ ๋™์ž‘ ํ์˜ ์ถ”์ƒ์  ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„ 1. ๋ฐฐ์—ด(array)์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ python ๋ฆฌ์ŠคํŠธ์™€ ๋ฉ”์„œ๋“œ๋“ค์„ ์ด์šฉ 2. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(linked list)๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ ์ด์ „์— ๊ตฌํ˜„ํ•œ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ด์šฉ ์—ฐ์‚ฐ์˜ ์ •์˜ size() - ํ˜„์žฌ ํ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ์›์†Œ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•จ isEmpty(..

์Šคํƒ์˜ ์‘์šฉ - ํ›„์œ„ ํ‘œ๊ธฐ ์ˆ˜์‹ ๊ณ„์‚ฐ

ํ›„์œ„ ํ‘œ๊ธฐ ์ˆ˜์‹ ๊ณ„์‚ฐ ๋ฌธ์ œ ์„ค๋ช… ์ธ์ž๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด expr ์€ ์†Œ๊ด„ํ˜ธ์™€ ์‚ฌ์น™์—ฐ์‚ฐ ๊ธฐํ˜ธ, ๊ทธ๋ฆฌ๊ณ  ์ •์ˆ˜๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์ค‘์œ„ ํ‘œํ˜„ ์ˆ˜์‹์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ solution() ์€ ์ด ์ˆ˜์‹์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ฐจ๋ก€๋กœ splitTokens(), infixToPostfix(), ๊ทธ๋ฆฌ๊ณ  postfixEval() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด ์ˆ˜์‹์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ, splitTokens() - ๊ฐ•์˜ ๋‚ด์šฉ์—์„œ์™€ ๊ฐ™์€ ์ฝ”๋“œ๋กœ ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. infixToPostfix() - ์ง€๋‚œ ๊ฐ•์˜์˜ ์—ฐ์Šต๋ฌธ์ œ์—์„œ ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ, ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. postfixEval() - ์ด๋ฒˆ ๊ฐ•์˜์˜ ์—ฐ์Šต๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์„ ์™„์„ฑํ•˜์„ธ์š”. ์ฆ‰, ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜ in..

์Šคํƒ์˜ ์‘์šฉ - ์ˆ˜์‹์˜ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• (Postfix Notation)

์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ• ( infix notation ) ์—ฐ์‚ฐ์ž๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž๋“ค์˜ ์‚ฌ์ด์— ์œ„์น˜ ( A + B ) * ( C + D ) ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ( postfix notation ) ์—ฐ์‚ฐ์ž๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž๋“ค์˜ ๋’ค์— ์œ„์น˜ A B + C D + * ์ค‘์œ„ ํ‘œํ˜„์‹ -> ํ›„์œ„ ํ‘œํ˜„์‹ ๊ด„ํ˜ธ์˜ ์ฒ˜๋ฆฌ ์—ฌ๋Š” ๊ด„ํ˜ธ๋Š” ์Šคํƒ์— push, ๋‹ซ๋Š” ๊ด„ํ˜ธ๋ฅผ ๋งŒ๋‚˜๋ฉด ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ popํ•œ๋‹ค. ์—ฐ์‚ฐ์ž๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ, ์—ฌ๋Š” ๊ด„ํ˜ธ ๋„ˆ๋จธ๊นŒ์ง€ popํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด ์—ฌ๋Š” ๊ด„ํ˜ธ์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ๊ฐ€์žฅ ๋‚ฎ๊ฒŒ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„ ์„ค์ •์€ ํŒŒ์ด์ฌ ์‚ฌ์ „์„ ํ™œ์šฉํ•˜์—ฌ prec๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ค‘์œ„ ํ‘œํ˜„์‹์„ ์™ผ์ชฝ๋ถ€ํ„ฐ ํ•œ ๊ธ€์ž์”ฉ ์ฝ์–ด์„œ ํ”ผ์—ฐ์‚ฐ์ž์ด๋ฉด ๊ทธ๋ƒฅ ์ถœ๋ ฅ, '('์ด๋ฉด ์Šคํƒ์— push, ')'์ด๋ฉด '('์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ popํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค. ์—ฐ์‚ฐ์ž..