Data Structure

[Data Structure] Deque ์‚ฌ์šฉ๋ฒ•

An effort will never betray ๐Ÿ˜Ž 2021. 8. 1. 15:22
๋ฐ˜์‘ํ˜•
  • c++ STL ์ค‘ ํ•˜๋‚˜์ธ Deque์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

Deque

  • Deque๋Š” Double-ended queue์˜ ์•ฝ์ž๋กœ ์–‘์ชฝ ์–ด๋””์—์„œ๋“  ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ์ธ ํ์ž…๋‹ˆ๋‹ค.

  • Queue ์—์„œ๋Š” ์›์†Œ๋ฅผ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ front๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™”๋‹ค๋ฉด, Deque๋Š” iterator์™€ index ์ ‘๊ทผ์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. push_back, push_front, pop_back, pop_front์™€ ๊ฐ™์€ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋””์—์„œ๋“  ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  front, back ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์›์†Œ๋ฅผ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • API ํ˜•ํƒœ๋‚˜ index ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ๊ฒƒ๋งŒ ๋ณด๋ฉด Queue ๋ณด๋‹ค๋Š” Vector์˜ ํ˜•ํƒœ์ฒ˜๋Ÿผ ๋ณด์ด๊ณ , ์˜คํžˆ๋ ค vector๋ณด๋‹ค ์–‘์ชฝ ๋ ์›์†Œ๋Š” ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์œ„ํ˜ธํ™˜์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•˜์ง€๋งŒ, Deque์™€ Vector์™€์˜ ์ฐจ์ด์ ์Œ ๋ช…ํ™•ํ•˜๊ฒŒ ์กด์žฌํ•˜๊ณ  ์ทจ์—… ๋ฉด์ ‘ ์‹œ CS(Computer Science) ์งˆ๋ฌธ์œผ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์–ด์„œ ๋ฏธ๋ฆฌ ์•Œ์•„๋‘๋ฉด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


Deque vs Vector

  • Deque๋Š” ์‹œํ€€์Šค์˜ ๋ ๋ถ€๋ถ„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•ž ๋ถ€๋ถ„์—์„œ๋„ ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

  • Vector๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š” ๋ฐ˜๋ฉด, Dequeue๋Š” ๋ชจ๋“  ์›์†Œ๋“ค์ด ์—ฐ์†๋œ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ ์ฃผ์†Œ๊ณต๊ฐ„์— offset์„ ๋‘์–ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ , Cache ์ ์šฉ ์‹œ์—๋„ Cache hit์œจ์ด ๋–จ์–ด์งˆ ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.

  • ๋ฐ˜๋Œ€๋กœ, vector๋Š” ์‹œํ€€์Šค๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐฐ์—ด ์ž์ฒด์ ์œผ๋กœ ์žฌํ• ๋‹นํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์ง€๋งŒ Deque๋Š” chunk ๋‹จ์œ„๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํฉ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธธ์ด๊ฐ€ ๊ธด ์‹œํ€€์Šค์ผ ๊ฒฝ์šฐ๋Š” Deque๊ฐ€ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.


API

  • operator= : ๋Œ€์ž…์—ฐ์‚ฐ์ž๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์–ด ์ƒˆ๋กœ์šด deque ์ธ์Šคํ„ด์Šค์— ๋Œ€์ž…์ด ๊ฐ€๋Šฅ

  • Iterators : begin, end, rbegin, rend์™€ ๊ฐ™์€ iterator๋กœ ์›์†Œ๋“ค ์ ‘๊ทผ ๊ฐ€๋Šฅ

  • size : deque์˜ size ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

  • empty : deque์˜ ์›์†Œ ์œ ๋ฌด ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜

  • operator[] : ์—ฐ์‚ฐ์ž๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์–ด์„œ index๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ

  • front : deque์˜ ์•ž ๋ถ€๋ถ„์˜ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

  • back : deque์˜ ๋’ท ๋ถ€๋ถ„์˜ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

  • push_back : deque์˜ ๋’ท ๋ถ€๋ถ„์— ์›์†Œ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜

  • push_front : deque์˜ ์•ž ๋ถ€๋ถ„์— ์›์†Œ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜

  • pop_back : deque์˜ ๋’ท ๋ถ€๋ถ„ ์›์†Œ ์‚ญ์ œํ•˜๋Š” ํ•จ์ˆ˜

  • pop_front : deque์˜ ์•ž ๋ถ€๋ถ„ ์›์†Œ ์‚ญ์ œํ•˜๋Š” ํ•จ์ˆ˜

  • insert : ๋งค๊ฐœ๋ณ€์ˆ˜ iterator์— ์›์†Œ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜

  • erase : ๋งค๊ฐœ๋ณ€์ˆ˜ iterator์˜ ์›์†Œ ์‚ญ์ œํ•˜๋Š” ํ•จ์ˆ˜

  • clear : ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ•จ์ˆ˜


Example

  • ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ์ˆ˜์ •ํ•  ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.
๋ฐ˜์‘ํ˜•