[ํ์ด์ฌ/python] ํ (Queue)
ํ(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์ ๋งจ ์(์ผ์ชฝ)์ ์์๋ฅผ ๊บผ๋ธ๋ค.
'๐์๊ณ ๋ฆฌ์ฆ > ๐ ๊ฐ๋ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ด์ฌ/python] ์์ด๊ณผ ์กฐํฉ : itertools ์ด์ฉํ๊ธฐ (permutations, combinations) (0) | 2021.04.01 |
---|---|
[ํ์ด์ฌ/python] ๋์ ๊ณํ๋ฒ (Dynamic Programming) (0) | 2021.03.25 |
[ํ์ด์ฌ/python] ์ ๋ ฌ - sort(), sorted() (0) | 2021.03.17 |
[ํ์ด์ฌ/python] ์ด์ง ํ์ (Binary Search) (0) | 2021.03.17 |
[ํ์ด์ฌ/python] ๋์ ๋๋ฆฌ (dictionary) (0) | 2021.03.12 |