Stack / Queue / Deque

์„ฑ์œคยท2026๋…„ 9์›” 7์ผ

[๐Ÿ—ƒ๏ธData Structure]

๋ชฉ๋ก ๋ณด๊ธฐ
2/6
post-thumbnail

์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ธ Stack, Queue, Deque์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์…‹ ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ธ๋‹ค๋Š” ์ ์€ ๊ฐ™์ง€๋งŒ, ์–ด๋–ค ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋А ๋ฐฉํ–ฅ์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ๊ฐ€์— ๋”ฐ๋ผ ์šฉ๋„๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.


1. Stack

Stack์€ ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out) ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์ฆ‰,

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜จ๋‹ค.

์ ‘์‹œ๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„๋‘๊ณ  ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ ‘์‹œ๋ถ€ํ„ฐ ๊บผ๋‚ด๋Š” ๋ชจ์Šต์„ ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์ฃ .

Stack์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ์ž‘์—…์„ push, ๊บผ๋‚ด๋Š” ์ž‘์—…์„ pop์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋ชจ๋‘ Stack์˜ ๊ฐ€์žฅ ์œ„์ชฝ์ธ Top์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.


Python์—์„œ Stack ์‚ฌ์šฉํ•˜๊ธฐ

Python์—๋Š” ๋ณ„๋„์˜ Stack ์ž๋ฃŒํ˜•์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์‹  ์ผ๋ฐ˜์ ์œผ๋กœ list๋ฅผ Stack์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

stack = []

stack.append(1)
stack.append(2)
stack.append(3)

print(stack)
# [1, 2, 3]

Stack์˜ ์ฃผ์š” ์—ฐ์‚ฐ

๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” append()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

stack.append(4)

# [1, 2, 3, 4]

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ๊ฐ’์„ ๊บผ๋‚ผ ๋•Œ๋Š” pop()์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

stack.pop()
# 4

print(stack)
# [1, 2, 3]

pop()์€ ๊ฐ’์„ ๋‹จ์ˆœํžˆ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‚ญ์ œํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.


๊ฐ’์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ Stack์˜ ๊ฐ€์žฅ ์œ„ ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด [-1]์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

stack[-1]
# 3

๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” top()๊ณผ ๊ฐ™์€ ์—ญํ• ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.


Stack์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

if not stack:
    print("Stack์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.")

Python์—์„œ๋Š” ๋นˆ ๋ฆฌ์ŠคํŠธ []๋ฅผ False๋กœ ์ทจ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— not stack์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Stack ์ฃผ์š” ์—ฐ์‚ฐ ์ •๋ฆฌ

๊ธฐ๋ŠฅPython์‹œ๊ฐ„๋ณต์žก๋„
๊ฐ’ ์‚ฝ์ž…stack.append(x)O(1)
Top ๊ฐ’ ์‚ญ์ œstack.pop()O(1)
Top ๊ฐ’ ํ™•์ธstack[-1]O(1)
๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธnot stackO(1)

Stack์€ ๋’ค์ชฝ์—์„œ๋งŒ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— Python์˜ list๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



2. Queue

Queue๋Š” ์„ ์ž…์„ ์ถœ(FIFO, First In First Out) ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

Stack๊ณผ ๋ฐ˜๋Œ€๋กœ,

๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜จ๋‹ค.

๋งˆํŠธ ๊ณ„์‚ฐ๋Œ€๋‚˜ ๋†€์ด๊ณต์›์˜ ๋Œ€๊ธฐ์ค„์„ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์ค„์„ ์„  ์‚ฌ๋žŒ์ด ๋จผ์ € ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ Queue ์—ญ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์‚ฝ์ž…                                      ์‚ญ์ œ
 โ†“                                          โ†‘

Rear  โ†’  [ 4 ] [ 3 ] [ 2 ] [ 1 ]  โ†’  Front

Queue์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ Rear์—์„œ ๋“ค์–ด์˜ค๊ณ  Front์—์„œ ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.



์˜ˆ๋ฅผ ๋“ค์–ด 1 โ†’ 2 โ†’ 3 ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์™”๋‹ค๋ฉด,

์ž…๋ ฅ

1 โ†’ 2 โ†’ 3

๋‚˜๊ฐ€๋Š” ์ˆœ์„œ ์—ญ์‹œ

์ถœ๋ ฅ

1 โ†’ 2 โ†’ 3

๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ Stack๊ณผ ๋น„๊ตํ•˜๋ฉด ์ฐจ์ด๊ฐ€ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

Stack

์ž…๋ ฅ : 1 โ†’ 2 โ†’ 3
์ถœ๋ ฅ : 3 โ†’ 2 โ†’ 1


Queue

์ž…๋ ฅ : 1 โ†’ 2 โ†’ 3
์ถœ๋ ฅ : 1 โ†’ 2 โ†’ 3

Python์—์„œ Queue ์‚ฌ์šฉํ•˜๊ธฐ

Queue ์—ญ์‹œ Python์— ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ณ„๋„์˜ ๋‚ด์žฅ Queue ์ž๋ฃŒํ˜•์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ฒ˜์Œ ์ƒ๊ฐํ•˜๋ฉด list๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

queue = []

queue.append(1)
queue.append(2)
queue.append(3)

queue.pop(0)

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์™œ์ผ๊นŒ์š”?


list์˜ pop(0)์ด ๋А๋ฆฐ ์ด์œ 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค.

[1, 2, 3, 4]

๋งจ ์•ž์— ์žˆ๋Š” 1์„ ์ œ๊ฑฐํ•˜๋ฉด

[2, 3, 4]

๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ฒ‰์œผ๋กœ ๋ณด๊ธฐ์—๋Š” ๋‹จ์ˆœํžˆ 1๋งŒ ์ œ๊ฑฐํ•œ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋’ค์— ์žˆ๋Š” ์›์†Œ๋“ค์„ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ์ด๋™์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[1, 2, 3, 4]

    โ†“  โ†“  โ†“
   ์•ž์œผ๋กœ ์ด๋™

[2, 3, 4]

๋”ฐ๋ผ์„œ

queue.pop(0)

์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N) ์ž…๋‹ˆ๋‹ค.

Queue์—์„œ๋Š” ๋งจ ์•ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋น„ํšจ์œจ์ ์ด๊ฒ ์ฃ .

๊ทธ๋ž˜์„œ Python์—์„œ๋Š” Queue๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ deque๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.



3. Deque

Deque๋Š” Double Ended Queue์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค.

๋ง ๊ทธ๋Œ€๋กœ

์–‘์ชฝ ๋์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ Queue๋Š” ํ•œ์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋ฐ˜๋Œ€์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์ง€๋งŒ, Deque๋Š” ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

appendleft()                              append()
      โ†“                                      โ†“

      [ 1 ] [ 2 ] [ 3 ] [ 4 ]

      โ†‘                                      โ†‘
  popleft()                                pop()


Python์—์„œ Deque ์‚ฌ์šฉํ•˜๊ธฐ

Python์—์„œ๋Š” collections ๋ชจ๋“ˆ์˜ deque๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

from collections import deque

dq = deque()

๊ธฐ์กด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ”๋กœ deque๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

from collections import deque

dq = deque([1, 2, 3])

print(dq)
# deque([1, 2, 3])

Deque์˜ ์ฃผ์š” ์—ฐ์‚ฐ

์˜ค๋ฅธ์ชฝ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” append()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

dq.append(4)

# deque([1, 2, 3, 4])

์™ผ์ชฝ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” appendleft()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

dq.appendleft(0)

# deque([0, 1, 2, 3, 4])

์˜ค๋ฅธ์ชฝ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ๋Š” pop(),

dq.pop()

์™ผ์ชฝ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ๋Š” popleft()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

dq.popleft()

๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋„ค ๊ฐ€์ง€๊ฐ€ Deque์˜ ํ•ต์‹ฌ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

dq.append(x)       # ์˜ค๋ฅธ์ชฝ ์‚ฝ์ž…
dq.appendleft(x)   # ์™ผ์ชฝ ์‚ฝ์ž…

dq.pop()           # ์˜ค๋ฅธ์ชฝ ์‚ญ์ œ
dq.popleft()       # ์™ผ์ชฝ ์‚ญ์ œ

์–‘ ๋์˜ ๊ฐ’์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ํ™•์ธํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

dq[0]      # ๊ฐ€์žฅ ์™ผ์ชฝ ๊ฐ’
dq[-1]     # ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๊ฐ’

Deque ์ฃผ์š” ์—ฐ์‚ฐ ์ •๋ฆฌ

๊ธฐ๋ŠฅPython์‹œ๊ฐ„๋ณต์žก๋„
์˜ค๋ฅธ์ชฝ ์‚ฝ์ž…append()O(1)
์™ผ์ชฝ ์‚ฝ์ž…appendleft()O(1)
์˜ค๋ฅธ์ชฝ ์‚ญ์ œpop()O(1)
์™ผ์ชฝ ์‚ญ์ œpopleft()O(1)

deque์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ์–‘์ชฝ ๋์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋ชจ๋‘ O(1) ์ด๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค.



4. Deque๋กœ Stack๊ณผ Queue ๊ตฌํ˜„ํ•˜๊ธฐ

์—ฌ๊ธฐ๊นŒ์ง€ ๋ณด๋ฉด ํ•œ ๊ฐ€์ง€ ์˜๋ฌธ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Deque๋Š” ์–‘์ชฝ์—์„œ ๋ชจ๋‘ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ์œผ๋‹ˆ Stack๊ณผ Queue ๋‘˜ ๋‹ค ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?

๋งž์Šต๋‹ˆ๋‹ค.

Deque๋Š” ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ Stack์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ  Queue์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


Deque๋ฅผ Stack์ฒ˜๋Ÿผ ์‚ฌ์šฉ

์˜ค๋ฅธ์ชฝ์—์„œ ๋„ฃ๊ณ  ์˜ค๋ฅธ์ชฝ์—์„œ ๋‹ค์‹œ ๊บผ๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

from collections import deque

stack = deque()

stack.append(1)
stack.append(2)
stack.append(3)

stack.pop()
                  append()
                     โ†“

[ 1 ] [ 2 ] [ 3 ]

                  โ†‘
                 pop()

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ 3์ด ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— LIFO, ์ฆ‰ Stack์ด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋งŒ Stack์€ list๋งŒ์œผ๋กœ๋„ ๋’ค์ชฝ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ O(1)์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๊ตณ์ด deque๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

stack = []

์ •๋„๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.


Deque๋ฅผ Queue์ฒ˜๋Ÿผ ์‚ฌ์šฉ

์ด๋ฒˆ์—๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ๋„ฃ๊ณ  ์™ผ์ชฝ์—์„œ ๊บผ๋ƒ…๋‹ˆ๋‹ค.

from collections import deque

queue = deque()

queue.append(1)
queue.append(2)
queue.append(3)

queue.popleft()
popleft()                         append()
    โ†‘                                โ†“

[ 1 ] [ 2 ] [ 3 ]

๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ 1์ด ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— FIFO, ์ฆ‰ Queue๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

Python ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ Queue๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ๋ณด๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.



5. list์™€ deque์˜ ์ฐจ์ด

Stack๊ณผ Queue๋ฅผ Python์œผ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ list์™€ deque๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์‹œ๊ฐ„๋ณต์žก๋„์— ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฐ์‚ฐlistdeque
์˜ค๋ฅธ์ชฝ ์‚ฝ์ž…O(1)O(1)
์˜ค๋ฅธ์ชฝ ์‚ญ์ œO(1)O(1)
์™ผ์ชฝ ์‚ฝ์ž…O(N)O(1)
์™ผ์ชฝ ์‚ญ์ œO(N)O(1)

list๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š” ๊ฒƒ์€ ๋น ๋ฅด์ง€๋งŒ, ์™ผ์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๊ธฐ์กด ์›์†Œ๋“ค์„ ์ด๋™์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด deque๋Š” ์–‘์ชฝ ๋์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ์–ตํ•˜๋ฉด ํŽธํ•ฉ๋‹ˆ๋‹ค.

Stack โ†’ list

Queue โ†’ deque

Deque โ†’ deque


6. Stack / Queue / Deque ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

์ž๋ฃŒ๊ตฌ์กฐํŠน์ง•๋™์ž‘ ๋ฐฉ์‹Python
Stackํ•œ์ชฝ์—์„œ ์‚ฝ์ž… / ์‚ญ์ œLIFOlist
Queue๋’ค์—์„œ ์‚ฝ์ž… / ์•ž์—์„œ ์‚ญ์ œFIFOdeque
Deque์–‘์ชฝ์—์„œ ์‚ฝ์ž… / ์‚ญ์ œ์–‘๋ฐฉํ–ฅdeque

์กฐ๊ธˆ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ทธ๋ฆผ์œผ๋กœ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Stack

             โ†“ append()

          [ 3 ] โ† Top
          [ 2 ]
          [ 1 ]

             โ†‘ pop()

LIFO
Last In First Out

Queue

popleft() โ† [ 1 ] [ 2 ] [ 3 ] โ† append()

FIFO
First In First Out

Deque

appendleft() โ†’ [ 1 ] [ 2 ] [ 3 ] โ† append()
                 โ†‘             โ†‘
             popleft()        pop()


๋งˆ๋ฌด๋ฆฌ

Stack, Queue, Deque๋Š” ๊ฒฐ๊ตญ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ์ˆœ์„œ์™€ ๋ฐฉํ–ฅ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด Stack,

๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด Queue,

์–‘์ชฝ ๋์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๋ฉด Deque๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Python์—์„œ๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ค์Œ ์ •๋„๋งŒ ํ™•์‹คํ•˜๊ฒŒ ๊ธฐ์–ตํ•ด๋‘๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# Stack
stack = []

stack.append(x)
stack.pop()
stack[-1]


# Queue
from collections import deque

queue = deque()

queue.append(x)
queue.popleft()


# Deque
dq.append(x)
dq.appendleft(x)

dq.pop()
dq.popleft()
Stack โ†’ list
Queue โ†’ deque
Deque โ†’ deque

์ž๋ฃŒ๊ตฌ์กฐ ์ž์ฒด๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ ์‹ค์ œ ๋ฌธ์ œ์—์„œ๋Š” ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€