[ํŒŒ์ด์ฌ/python] ํ (Queue)

2021. 3. 19. 12:22

ํ(Queue)๋Š” ์Šคํƒ(Stack)๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฐ˜๋Œ€์˜ ์„ฑ๊ฒฉ์„ ์ง€๋‹Œ๋‹ค.

์Šคํƒ์€ LIFO(Last In First Out)์˜ ํ˜•ํƒœ๋กœ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒซ ๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๊ณ 

ํ๋Š” FIFO(First In First Out)์˜ ํ˜•ํƒœ๋กœ ์ฒซ ๋ฒˆ์งธ ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒซ ๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค.

 

์ผ์ฐจ์›์˜ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ธ ํ๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์—ฐ์‚ฐ enqueue์™€ ๊ฐ’์„ ๊บผ๋‚ด๋Š” ์—ฐ์‚ฐ dequeue๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค.

ํ์˜ ์ข…๋ฅ˜๋กœ๋Š” ์„ ํ˜• ํ(Queue), ์›ํ˜• ํ(Circular Queue), ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)๊ฐ€ ์žˆ๋‹ค.

 

์„ ํ˜• ํ๋Š” ๋ง‰๋Œ€๋ชจ์–‘์˜ ํ๋กœ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ๊บผ๋‚ด๊ฑฐ๋‚˜ ์ž๋ฃŒ๋ฅผ ํ•œ์นธ์”ฉ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์•ผํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

์„ ํ˜• ํ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ ๊ฒƒ์ด ์›ํ˜• ํ๋‹ค.

head๊ฐ€ ํ์˜ ๋งจ ๋์— ๋‹ฟ์œผ๋ฉด ํ์˜ ๋งจ ์•ž์œผ๋กœ ์ž๋ฃŒ๋ฅผ ๋ณด๋‚ด์–ด ์›ํ˜•์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์„ ํ˜• ํ์˜ ๋‹จ์ ์ด ๊ทธ๋Œ€๋กœ ๋“œ๋Ÿฌ๋‚œ๋‹ค.

๋”ฐ๋ผ์„œ 1. collection.deque / 2. Queue ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ด์šฉํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋‹ค.

 

1. collection.deque

deque๋Š” double-ended queue์˜ ์ค„์ž„๋ง๋กœ ์•ž ๋’ค ์–‘๋ฐฉํ–ฅ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

from collections import deque


# 1. append(x)
deq = deque([1, 2, 3])
deq.append(4)
>>> deq = [1, 2, 3, 4]


# 2. appendleft(x)
deq = deque([1, 2, 3])
deq.appendleft(0)
>>> deq = [0, 1, 2, 3]


# append()์™€ extend()์˜ ์ฐจ์ด
deq.append('def')
>>> deq = ['a', 'b', 'c', 'def']
deq.extend('def')
>>> deq = ['a', 'b', 'c', 'd', 'e', 'f']


# 3. extend(i)
deq = deque(['a', 'b', 'c'])
deq.extend('de')
>>> deq = ['a', 'b', 'c', 'd', 'e']


# 4. extendleft(i)
deq = deque(['a', 'b', 'c'])
deq.extendleft('de')
>>> deq = ['e', 'd', 'a', 'b', 'c']


# 5. pop()
deq = deque([1, 2, 3])
deq.pop()
>>> deq.pop() -> 3
>>> deq = [1, 2]


# 6. popleft()
deq = deque([1, 2, 3])
deq.popleft()
>>> deq.popleft() -> 1
>>> deq = [2, 3]


# 7. rotate(n)
deq = deque([1, 2, 3, 4, 5])
deq.rotate(1)
>>> deq = [5, 1, 2, 3, 4]
deq = deque([1, 2, 3, 4, 5])
deq.rotate(-1)
>>> deq = [2, 3, 4, 5, 1]
  • append(x) : ๋ฆฌ์ŠคํŠธ์—์„œ์˜ ์‚ฌ์šฉ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ deque์˜ ๋งˆ์ง€๋ง‰(์˜ค๋ฅธ์ชฝ)์— x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • appendlieft(x) : ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ deque์˜ ์•ž(์™ผ์ชฝ)์— x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • extend(i) : ๋งˆ์ง€๋ง‰(์˜ค๋ฅธ์ชฝ)์— i๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ๊ฐ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ์ ์—์„œ append์™€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • extendleft(i) : ์•ž(์™ผ์ชฝ)์— i๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • pop() : ๋ฆฌ์ŠคํŠธ์—์„œ์˜ ์‚ฌ์šฉ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ deque์˜ ๋งˆ์ง€๋ง‰(์˜ค๋ฅธ์ชฝ)์—์„œ๋ถ€ํ„ฐ ์ œ๊ฑฐํ•œ๋‹ค. 
  • popleft() : deque์˜ ์•ž(์™ผ์ชฝ)์—์„œ๋ถ€ํ„ฐ ์ œ๊ฑฐํ•œ๋‹ค.
  • rotate(n) : ์š”์†Œ๋“ค์„ n๋งŒํผ ํšŒ์ „ํ•œ๋‹ค. ์Œ์ˆ˜์ด๋ฉด ์™ผ์ชฝ์œผ๋กœ, ์–‘์ˆ˜์ด๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „ํ•œ๋‹ค.

2. Queue ๋ชจ๋“ˆ

Queue ๋ชจ๋“ˆ์€ deque์™€ ๋‹ฌ๋ฆฌ ๋ฐฉํ–ฅ์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ put๊ณผ get์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ฉฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋“ค์ด ๋™์‹œ์— ์ˆ˜ํ–‰ํ•ด๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

from queue import Queue
que = Queue([1, 2, 3])

que.put(4)
>>> que = [1, 2, 3, 4]

que.get()
>>>get() -> 1
>>>que = [2, 3, 4]
  • put(x) : que์— x๋ฅผ ๋งˆ์ง€๋ง‰(์˜ค๋ฅธ์ชฝ)์— ์‚ฝ์ž…ํ•œ๋‹ค.
  • get() : que์˜ ๋งจ ์•ž(์™ผ์ชฝ)์˜ ์š”์†Œ๋ฅผ ๊บผ๋‚ธ๋‹ค.
728x90

BELATED ARTICLES

more