๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm/๐Ÿ•โ€๐Ÿฆบ ๋ฐ”ํ‚น๋… ๊ฐœ๋…

[0x07] ๋ฑ

by nitronium102 2023. 6. 26.

์ •์˜์™€ ์„ฑ์งˆ

์ •์˜ double-ended queue

์–‘์ชฝ ๋์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์ „๋ถ€ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ

์„ฑ์งˆ

  • ์›์†Œ์˜ ์ถ”๊ฐ€์™€ ์ œ๊ฑฐ : O(1)
  • ์ œ์ผ ์•ž/๋’ค์˜ ์›์†Œ ํ™•์ธ : O(1)
  • ์ œ์ผ ์•ž/๋’ค์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์˜ ํ™•์ธ/๋ณ€๊ฒฝ์ด ์›์น™์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ
    • ์ธ๋ฑ์Šค๋กœ ์›์†Œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„

const int MAX = 1e7;
int data[2*MAX + 1];
int head = MAX, tail = MAX; // ์‹œ์ž‘ ์ง€์ ์„ ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์œผ๋กœ : ์•ž๋’ค๋กœ ํ™•์žฅ
// head : ์‹œ์ž‘. tail : ๋‹ค์Œ์— ๋“ค์–ด๊ฐˆ ์›์†Œ์˜ ์ž๋ฆฌ

void push_front(int x)  data[--head] = x;
void push_back(int x)   data[tail++] = x;
void pop_front() head++;
void pop_back()  tail--;
int front() return data[head];
int back() return data[tail-1];

STL deque

vector์™€ ๋‹ค๋ฅด๊ฒŒ deque์€ ๊ฐ’์ด ์—ฐ์†์ ์œผ๋กœ ๋ฐฐ์น˜๋˜์–ด ์žˆ์ง€ ์•Š์Œ

dq[idx] = val;
dq.insert(dq.begin() + idx, val);
dq.erase(dq.begin() + idx);

๋Œ“๊ธ€