๐Ÿ“–Deque(Double-Ended Queue)

์•ž๊ณผ ๋’ค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์–‘๋ฐฉํ–ฅ ์ž๋ฃŒํ˜•

from collections import deque
 
dq = deque()
dq = deque('hello') # deque(['h', 'e', 'l', 'l', 'o'])
  • ๋ฌธ์ž์—ด์„ ์ด์šฉํ•ด deque๋ฅผ ๋งŒ๋“ค๋ฉด ๊ฐ ๋ฌธ์ž๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ์˜ deque๊ฐ€ ๋งŒ๋“ค์–ด์ง
  • ํ๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ, ๋ฆฌ์ŠคํŠธ์— ๋น„ํ•ด ์†๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋น ๋ฆ„

๐Ÿ“– ์‚ฝ์ž… ํ•จ์ˆ˜

๐Ÿ“Žappend(v)/appendleft(v)

๊ฐ€์žฅ ๋’ค/์•ž์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜

from collections import deque
dq = deque('hello')
 
dq.append(v)
dq.appendleft(v)

๐Ÿ“Žinsert(idx, v)

ํŠน์ • ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜

from collections import deque
dq = deque('hello')
 
dq.insert(idx, v)

๐Ÿ“Žextend(iterable)/extendleft(iterable)

iterableํ•œ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ deque์˜ ๊ฐ€์žฅ ๋’ค/์•ž์— ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜

from collections import deque
dq = deque('hello')
 
dq.extend(vs)
dq.extendleft(vs)
  • iterable ๊ฐ’ ์ž์ฒด๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ iterable ์•ˆ์˜ ์š”์†Œ๋“ค์ด ๊ฐ๊ฐ์˜ ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ

๐Ÿ“–์‚ญ์ œ ํ•จ์ˆ˜

๐Ÿ“Žpop()/popleft()

๊ฐ€์žฅ ๋’ค/์•ž์˜ ์›์†Œ๋ฅผ ์‚ญ์ œํ•œ ํ›„ returnํ•˜๋Š” ํ•จ์ˆ˜

from collections import deque
dq = deque('hello')
 
dq.pop() # 'o'
dq.popleft() # 'h'
  • ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์—†์œผ๋ฉด idxError ๋ฐœ์ƒ

๐Ÿ“Žremove(v)

์ œ์ผ ์ฒ˜์Œ ๋‚˜์˜จ ํ•ด๋‹น ๊ฐ’์„ ์‚ญ์ œํ•˜๋Š” ํ•จ์ˆ˜

from collections import deque
dq = deque('hello')
 
dq.remove('l') # dq(['h', 'e', 'l', 'o'])
  • ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์—†์œผ๋ฉด valueError ๋ฐœ์ƒ

๐Ÿ“–๊ธฐํƒ€ ํ•จ์ˆ˜

๐Ÿ“Žreverse()

deque์˜ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœ ๋’ค์ง‘๋Š” ํ•จ์ˆ˜

from collections import deque
dq = ('hello')
 
dq.reverse() # ['o', 'l', 'l', 'e', 'h']
  • ๋ฆฌํ„ด ๊ฐ’ ์—†์Œ

๐Ÿ“Žrotate(n)

deque๋ฅผ n๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋Š” ํ•จ์ˆ˜

from collections import deque
dq = ('hello')
 
dq.rotate(3) # ['l', 'l', 'o', 'h', 'e']
  • n์ด ์Œ์ˆ˜๋ผ๋ฉด ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „
  • ๋ฆฌํ„ด ๊ฐ’ ์—†์Œ

๐Ÿ“Žclear()

deque์— ์žˆ๋Š” ๋ชจ๋“  ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜

from collections import deque
dq = ('hello')
 
dq.clear() # deque([])

๐Ÿ“–์‹œ๊ฐ„๋ณต์žก๋„

listdeque
๋งจ ์•ž ์›์†Œ ์ถ”๊ฐ€list.insert(0, v)
O(n)
dq.appendleft()
O(1)
๋งจ ์•ž ์›์†Œ ์‚ญ์ œlist.pop(0)
O(n)
dq.popleft()
O(1)
๋งจ ๋’ท ์›์†Œ ์ถ”๊ฐ€list.append(v)
O(1)
dq.append(v)
O(1)
๋งจ ๋’ท ์›์†Œ ์‚ญ์ œlist.pop()
O(1)
dq.pop()
O(1)