Python deque
deque ๋ผ๋ ๊ฒ์ ์ฝ๊ฒ ๋งํ์๋ฉด ํ์ด์ฌ์ list ์ ๊ฐ์ด ์์๋ค์ ํ ๊ณณ์ ๋ด์๋๋ ๋ฐฐ์ด์ด๋ค.
ํ์ด์ฌ์์ ํ queue๋ First In First Out (FIFO) ์ ๋ฐฉ์์ผ๋ก ์๋๋๋ค. ๋ฑ(๋ฐํ)๋ ํ๋ ํ์ด์ง๋ง ์๋ฐฉํฅ์ธ queue์ด๋ค. ์ ์ชฝ ๋ฐฉํฅ ๋ชจ๋์์ (์, ๋ค) ์์๋ฅผ ์ถ๊ฐ/ ์ ๊ฑฐํ ์ ์๋ค.
List๋ ์๋๋ฐ ๊ตณ์ด deque๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ?
๊ฐ๋ตํ๊ฒ ๋งํ์๋ฉด List ๋ณด๋ค deque์ ์๋๊ฐ ํจ์ฌ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. list๋ O(n) ์ ์๋, deque๋ O(1)์ ์๋์ด๋ค.
์๊ธฐ ํ์์ ๋ณด๋ค์ํผ O(1)์ ์๋๊ฐ ๊ฐ - ์ฅ ์ข์ best ์๋์ด๋ค. ๊ทธ๊ฒ ๋ฐ๋ก deque ! ์ฐ์ฐ์ด ๋ง์์๋ก ์์ธ ์ด์ ๊ฐ ์๋ค. ์ฒ์ deque์๊ณ ๋ฆฌ์ฆ์ ํ์ด๋ณด๋ฉฐ ์ ๋ฆฌ์คํธ์ ๊ฐ์๋ฐ ๊ตณ์ด ์ด๊ฑธ import๋ฅผ ํด์์ ๊ท์ฐฎ๊ฒ ์ธ๊น ? ์๊ฐํ๋๋ฐ ์ฐพ์๋ณด๋ ์์๊ฐ์ ์๋ , ์ฑ๋ฅ๋ฉด์์์ ์ฅ์ ๋๋ฌธ์ด์๋ค.
ํนํ append/ remove / push / pop ์ฐ์ฐ์ด ์์ฃผ ์ผ์ด๋๋ ์๊ณ ๋ฆฌ์ฆ์์ ์ฅ์ ์ ๋ถ๊ฐ์ํฌ ์ ์๋ค. Deque๋ ์คํ(stack)์ผ๋ก๋, Queue(ํ)๋ก๋ ์ฌ์ฉํ ์ ์๋ค.
๊ฒฐ๋ก : Deque ์ ์์ฃผ ์ฑ๋ฅ์ข์ ํธ๋ฆฌํ LIST-LIKE ๋งค์๋๋ค !
Deque์ max length ๋ฅผ ์ง์ ํด์ค ์ ์๋ค. (์๋์ ์ฝ๋ฉ ํ ์คํธ์์ ์ฌ์ฉํ ์ ์๋ ๋ฒ์ ์ฒจ๋ถ)
Deque๋ฅผ ์ฐ๋ ๋ฐฉ๋ฒ
๋จผ์ import ๋ฅผ ํด์ฃผ๊ณ ๋ณ์ = deque() ์ ์ ์ธํจ์ผ๋ก์จ ํด๋น deque ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
from collections import deque
a = deque()
print(a)
Deque ๋งค์๋๋ค ( List์ ๋น๊ตํด๋ณด๊ธฐ ! )
Deque ๋งค์๋๋ค ( List์ ๋น๊ตํด๋ณด๊ธฐ ! )
q = deque() | ||
๋งค์๋ | ์ค๋ช | List ๋งค์๋์ ์ผ์น ์ฌ๋ถ |
q.append(item) | ์ค๋ฅธ์ชฝ ๋์ ์ฝ์ | O (List์๋ ํด๋น ๋งค์๋ ์กด์ฌ) |
q.appendleft(item) | ์ผ์ชฝ ๋์ ์ฝ์ | X |
q.pop() | ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์์ ๋ฐํ ๋ฐ ์ญ์ | O |
q.popleft() | ๊ฐ์ฅ ์ผ์ชฝ์ ์์ ๋ฐํ ๋ฐ ์ญ์ | X |
q.extend(array) | ์ฃผ์ด์ง array ๋ฐฐ์ด์ ์ํํ๋ฉฐ q์ ์ค๋ฅธ์ชฝ์ ์ถ๊ฐ | O |
q.extendleft(array) | ์ฃผ์ด์ง array ๋ฐฐ์ด์ ์ํํ๋ฉฐ q์ ์ผ์ชฝ์ ์ถ๊ฐ | X |
q.remove(item) | ํด๋น item q์์ ์ฐพ์ ์ญ์ | O |
q.rotate(์ซ์) | ํด๋น ์ซ์๋งํผ ํ์ (์์ : ์๊ณ๋ฐฉํฅ, ์์ : ๋ฐ์๊ณ ๋ฐฉํฅ) | X |
๋ด๊ฐ ์์ฑํ deque ์์ !
# ์ฝ๋
from collections import deque
q = deque([1,2,3])
q.append(4)
print(q)
q.appendleft(0)
print(q)
q.pop()
print(q)
q.popleft()
print(q)
q.append(111)
print(q)
q.remove(111)
print(q)
# ๊ฒฐ๊ณผ๊ฐ
์์๋ฅผ ๋ณด๋ฉฐ ๋ ์ฝ๊ฒ ์ดํดํด๋ณด๊ธฐ
from collections import deque
q = deque([1,2,3])
print('%-25s' %'original q =',q)
q.append(4)
print('%-25s' %'after append(4) = ',q)
q.appendleft(0)
print('%-25s' %'after appendleft(0) =',q,'\n')
q.pop()
print('%-25s' %'after pop() =',q)
q.popleft()
print('%-25s' %'after popleft() =',q,'\n')
arr1 = [10,11,12]
q.extend(arr1)
print('%-25s' %'after extend(arr) =',q)
arr2 = [-2,-1,0]
q.extendleft(arr2)
print('%-25s' %'after extendleft(arr2) =',q,'\n')
q.remove(-2)
q.remove(-1)
print('%-25s' %'after remove -1,-2 =', q)
q.rotate(1)
print('%-25s' %'after rotate(1) =',q)
q.rotate(2)
print('%-25s' %'after rotate(2) =',q)
q.rotate(-3)
print('%-25s' %'after rotate(-4) =', q)
Max length์ ์ ํ ์ ์๋ Deque !
from collections import deque
def solution(n, a):
cache = deque(maxlen=n)
.
.
.
์์ ๊ฐ์ด deque๋ฅผ ์ฒ์ ์ ์ธํ ๋ ์ต๋ ๊ธธ์ด๊ฐ์ ์ค์ ํด ๋์ ์ ์๋ค. ์ผ๋ฐ [] ๋ฆฌ์คํธ์ผ ๊ฒฝ์ฐ์๋ ๊ธธ์ด์ ๋ง์ถฐ pop ๋๋ remove๋ฅผ ํด์ฃผ์ด์ผํ๋๋ฐ deque์ ์ด ๊ธฐ๋ฅ์ผ๋ก ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์ค์ Queue ๋ฅผ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด
https://codingpractices.tistory.com/49
[๋ฐฑ์ค] 2623๋ฒ ์์ ํ๋ก๊ทธ๋จ / ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
์์ ์ ๋ ฌ์ ๋ชจ๋ฅด๋ฉด ์ ๋ง ํ๊ธฐ ํ๋ ๋ฌธ์ ์ด๋ค. ์ ํ๋ธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ๊ณ ์ฐธ๊ณ ํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ํ์ด์ฌ ์ฝ๋ฉํ ์คํธ 2์ฃผ์ฐจ, ์ฒ์ ์์ ์ ๋ ฌ์ ์ ํด๋ณด๋ ์ ๋ง ์ด๋ ค์ ๋ค. ์ ๊ฐ๋ ์ ๋ฐ๋ก ํฌ
codingpractices.tistory.com
2018 KAKAO BLIND RECRUITMENT ํด์ ๋ฌธ์ ์์ Deque์ maxlength ๋ฅผ ํ์ฉํ ์ ์๋ค.
https://school.programmers.co.kr/learn/courses/30/lessons/17680
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
'Algorithm๐ค > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] continue & break ๋ฌธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ๐ (2) | 2023.06.08 |
---|---|
[python] ํ์ด์ฌ ํ์ ๋ณํ, ํ๋ณํ (float, int, str, chr, bool) (0) | 2023.06.08 |
[Python๐ฑ] ๋ฆฌ์คํธ ๋ ๊ฐ๋ก ๋์ ๋๋ฆฌ ๋ง๋ค๊ธฐ (0) | 2023.06.07 |
[Python๐ฑ] 2์ฐจ์ ๋ฐฐ์ด ์ ๋ ฅ๋ฐ๊ธฐ (0) | 2023.06.07 |
[Python๐ฑ] 1์ฐจ์ ๋ฐฐ์ด ์ ๋ ฅ๋ฐ๊ธฐ (0) | 2023.06.07 |