KR_CS_Stack_Queue - somaz94/DevOps-Engineer GitHub Wiki

Q5: μŠ€νƒ(Stack)κ³Ό 큐(Queue)

질문: μŠ€νƒκ³Ό 큐의 λ™μž‘ 원리λ₯Ό LIFO/FIFO κ΄€μ μ—μ„œ μ„€λͺ…ν•˜κ³ , μ‹œκ°„ λ³΅μž‘λ„μ™€ 싀무 ν™œμš© 사둀λ₯Ό μ„€λͺ…ν•˜μ„Έμš”.


μ£Όμš” μš©μ–΄

μš©μ–΄ μ„€λͺ…
Stack LIFO(Last In First Out) β€” ν›„μž…μ„ μΆœ 자료ꡬ쑰
Queue FIFO(First In First Out) β€” μ„ μž…μ„ μΆœ 자료ꡬ쑰
Push/Pop μŠ€νƒμ˜ μ‚½μž…/μ‚­μ œ μ—°μ‚°
Enqueue/Dequeue 큐의 μ‚½μž…/μ‚­μ œ μ—°μ‚°
Call Stack ν•¨μˆ˜ 호좜 정보λ₯Ό μ €μž₯ν•˜λŠ” μŠ€νƒ ꡬ쑰
Priority Queue μš°μ„ μˆœμœ„ 기반 큐 (Heap으둜 κ΅¬ν˜„)

μŠ€νƒ (Stack) β€” LIFO

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  TOP    β”‚  ← Push / Pop
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    5    β”‚  (λ§ˆμ§€λ§‰ μ‚½μž…, κ°€μž₯ λ¨Όμ € 제거)
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    3    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    2    β”‚  (첫 μ‚½μž…, κ°€μž₯ λ‚˜μ€‘μ— 제거)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
 BOTTOM

μ—°μ‚° 및 μ‹œκ°„ λ³΅μž‘λ„

μ—°μ‚° μ„€λͺ… μ‹œκ°„ λ³΅μž‘λ„
push(item) μŠ€νƒ 상단에 μΆ”κ°€ O(1)
pop() 상단 μš”μ†Œ 제거 및 λ°˜ν™˜ O(1)
peek() 상단 μš”μ†Œ 확인 (제거 X) O(1)
isEmpty() λΉ„μ–΄μžˆλŠ”μ§€ 확인 O(1)

ν™œμš© 사둀

사둀 μ„€λͺ…
ν•¨μˆ˜ 호좜 μŠ€νƒ (Call Stack) μž¬κ·€ 호좜 μ‹œ 각 ν•¨μˆ˜ ν”„λ ˆμž„μ„ μŠ€νƒμœΌλ‘œ 관리
DFS (깊이 μš°μ„  탐색) 탐색할 λ…Έλ“œλ₯Ό μŠ€νƒμ— μ €μž₯ν•˜μ—¬ κ°€μž₯ κΉŠμ€ 경둜 λ¨Όμ € 탐색
κ΄„ν˜Έ μœ νš¨μ„± 검사 μ—¬λŠ” κ΄„ν˜Έλ₯Ό push, λ‹«λŠ” κ΄„ν˜Έ λ§Œλ‚  λ•Œ popν•˜μ—¬ λ§€μΉ­ 확인
Undo/Redo μž‘μ—… 이λ ₯을 μŠ€νƒμœΌλ‘œ 관리

큐 (Queue) β€” FIFO

Front                              Rear
  ↓                                  ↓
β”Œβ”€β”€β”€β”€β”€β” β†’ β”Œβ”€β”€β”€β”€β”€β” β†’ β”Œβ”€β”€β”€β”€β”€β” β†’ β”Œβ”€β”€β”€β”€β”€β”
β”‚  2  β”‚   β”‚  7  β”‚   β”‚  3  β”‚   β”‚  5  β”‚
β””β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”˜
Dequeue                          Enqueue

μ—°μ‚° 및 μ‹œκ°„ λ³΅μž‘λ„

μ—°μ‚° μ„€λͺ… μ‹œκ°„ λ³΅μž‘λ„
enqueue(item) 큐 λ’€μͺ½μ— μΆ”κ°€ O(1)
dequeue() μ•žμͺ½ μš”μ†Œ 제거 및 λ°˜ν™˜ O(1)
peek() μ•žμͺ½ μš”μ†Œ 확인 (제거 X) O(1)
isEmpty() λΉ„μ–΄μžˆλŠ”μ§€ 확인 O(1)

ν™œμš© 사둀

사둀 μ„€λͺ…
BFS (λ„ˆλΉ„ μš°μ„  탐색) 탐색할 λ…Έλ“œλ₯Ό 큐에 μ €μž₯ν•˜μ—¬ 레벨 μˆœμ„œλ‘œ 탐색
μž‘μ—… μŠ€μΌ€μ€„λ§ OS ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λŸ¬, ν”„λ¦°ν„° μŠ€ν’€λŸ¬
λ©”μ‹œμ§€ 큐 Kafka, RabbitMQ β€” Producer/Consumer νŒ¨ν„΄
이벀트 처리 JavaScript 이벀트 λ£¨ν”„μ˜ Task Queue

μŠ€νƒ vs 큐 비ꡐ

ν•­λͺ© Stack Queue
원리 LIFO FIFO
μ‚½μž… μœ„μΉ˜ Top Rear
μ‚­μ œ μœ„μΉ˜ Top Front
탐색 μ•Œκ³ λ¦¬μ¦˜ DFS BFS
μ£Όμš” ν™œμš© ν•¨μˆ˜ 호좜, Undo, κ΄„ν˜Έ 검사 μŠ€μΌ€μ€„λ§, λ©”μ‹œμ§€ 큐, 이벀트 처리

μš°μ„ μˆœμœ„ 큐 (Priority Queue)

일반 큐와 달리 μš°μ„ μˆœμœ„κ°€ 높은 ν•­λͺ©μ΄ λ¨Όμ € 처리됨. Heap 자료ꡬ쑰둜 κ΅¬ν˜„.

μ—°μ‚° μ‹œκ°„ λ³΅μž‘λ„
enqueue O(log n)
dequeue O(log n)
peek O(1)

ν™œμš©: Dijkstra μ΅œλ‹¨ 경둜, μž‘μ—… μŠ€μΌ€μ€„λ§, 이벀트 λ“œλ¦¬λΈ μ‹œμŠ€ν…œ


μ°Έκ³ 

⚠️ **GitHub.com Fallback** ⚠️