λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
✨ 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);

'✨ Algorithm > πŸ•β€πŸ¦Ί 바킹독 κ°œλ…' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[0x09] BFS  (0) 2023.06.26
[0x08] μŠ€νƒμ˜ ν™œμš©(μˆ˜μ‹μ˜ κ΄„ν˜Έ 쌍)  (0) 2023.06.26
[0x06] 큐  (0) 2023.06.20
[0x05] μŠ€νƒ  (0) 2023.06.20
[0x04] μ—°κ²°λ¦¬μŠ€νŠΈ  (0) 2023.06.20

λŒ“κΈ€