Stack & Queue & Deque
์คํ๊ณผ ํ๋ ์๋ฃ๊ตฌ์กฐ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ์ถ์์๋ฃํ(Abstract Data Type, ADT)์ด๋ค.
์ถ์์๋ฃํ(ADT)์ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ช
์ํ์ง ์๊ณ , ์๋ฃ๊ตฌ์กฐ์ ํน์ฑ๊ณผ ์ฐ์ฐ์ ๋ช
์ํ ๊ฒ์ด๋ค.
ย ์คํ (Stack)
โข
์คํ์ด๋ผ๋ ์ด๋ฆ์ ์์์ฌ๋ฆฐ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋์ ์คํ์ ์์์ฌ๋ฆฐ ํํ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋ค.
โข
์คํ์ ํ ์ชฝ ๋ฐฉํฅ์๋ง ์๋ฃ๋ฅผ ์ถ๊ฐ ๋ฐ ์ญ์ ํ ์ ์์ผ๋ฉฐ, ๊ฐ์ฅ ๋ง์ง๋ง์ ์ฝ์
๋ ์๋ฃ์ ์์น๋ฅผ top ์ด๋ผ ํ๋ค.
โข
์คํ์ top ์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ๊ทธ ์ธ์ ์์น์ ๋ํ ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
โข
LIFO (Last-In-First-Out, ํ์
์ ์ถ) ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
ย ADT Stack์ ์ฐ์ฐ
1.
push(item) : ์คํ์ item์ ์ฝ์
ํ๋ค (๋ง์ฝ size๋ฅผ ์ด๊ณผํ๋ค๋ฉด, false๋ฅผ ๋ฐํํ ์ ์๋ค) O(1)
2.
pop() : ์คํ์ top์ ์์นํ item์ ๋ฐํํ๋ฉด์ ๋์์ ์ ๊ฑฐํ๋ค (๋ฐํํ์ง ์์ ์ ์๋ค) O(1)
3.
peek() : ์คํ์ top์ ์์นํ item์ ์ญ์ ์์ด ๋ฐํํ๋ค O(1)
4.
ifFull() : ์คํ์ด ๊ฐ๋ ์ฐจ์๋ค๋ฉด treu, ์๋๋ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค O(1)
5.
isEmpty() : ์คํ์ item์ด ์๋ค๋ฉด true, ์๋๋ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค. O(1)
ย ์คํ์ ์ฅ๋จ์
1.
top ์์น์ ๋ฐ์ดํฐ์ ๋ฐ๋ก ์ ๊ทผํ๋ฏ๋ก ๋ฐ์ดํฐ ์ฝ์
, ์ญ์ ์ ์๊ฐ๋ณต์ก๋๊ฐ O(1) ๋ก ๋น ๋ฅด๋ค.
2.
top ์ด์ธ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก, ํ์์ด ๋ถ๊ฐ๋ฅํ๋ค. ํ์ํ๋ ค๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ pop() ํด์ผ ํ๋ค.
ย ์คํ์ ํ์ฉ
โข
์ฌ๊ท ์๋ก๋ฆฌ์ฆ
โข
DFS ์๊ณ ๋ฆฌ์ฆ
โข
์์
์คํ ์ทจ์์ ๊ฐ์ ์ญ์ถ์ ์์
์ด ํ์ํ ๋
โข
๊ดํธ ๊ฒ์ฌ, ํ์ ์ฐ์ฐ๋ฒ, ๋ฌธ์์ด ์ญ์ ์ถ๋ ฅ ๋ฑ
ย ํ (Queue)
ํ๋ผ๋ ์ด๋ฆ์ ๋๊ธฐ์ด์ ์๋ฏธํ๋ค. ์ค์ ์์ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ๋๋ค๊ณผ ์ ์ฌํ๋ค.
โข
ํ๋ ํ์ชฝ์์ ์ฝ์
, ๋ฐ๋ ์ชฝ์์ ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
โข
์ฝ์
์ด ์ด๋ฃจ์ด์ง๋ ์ชฝ์ rear
โข
๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ ์ชฝ์ front ๋ผ๊ณ ํ๋ค.
โข
์ ์
์ ์ถ (First-In-First-Out, FIFO)
ย ADT Queue์ ์ฐ์ฐ
1.
enqueue(item) : ํ์ item์ ์ฝ์
ํ๋ค. O(1)
2.
dequeue() : ํ์ front์ ์์นํ item์ ๋ฐํํ๊ณ ์ญ์ ํ๋ค. O(1), O(N)
3.
peek() : ํ์ front์ ์์นํ item์ ์ญ์ ์์ด ๋ฐํํ๋ค. O(1)
4.
ifFull() : ํ๊ฐ ๊ฐ๋ ์ฐจ์๋ค๋ฉด true, ์๋๋ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค. O(1)
5.
isEmpty() : ํ์ item์ด ์๋ค๋ฉด true, ์๋๋ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค. O(1)
ย ํ์ ์ฅ๋จ์
1.
front ์์น์ ๋ฐ์ดํฐ์ ๋ฐ๋ก ์ ๊ทผํ๋ฏ๋ก ๋ฐ์ดํฐ ์ฝ์
, ์ญ์ ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(1) ๋ก ๋น ๋ฅด๋ค.
2.
ํ ์ญ์ front ๊ฐ ์๋ ์ค๊ฐ์ ์์นํ ๋ฐ์ดํฐ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค.
3.
ํ๋ฅผ Linked List๊ฐ ์๋๋ผ ์ผ๋ฐ Array ๋ก ๊ตฌํํ๋ฉด dequeue์ ์๊ฐ๋ณต์ก๋๊ฐ O(n) ์ด ๋จ์ ์ ์ํ๋ค (front์ item์ ์ญ์ ํ๋ฉด ๋ชจ๋ ์์ผ๋ก ํ ์นธ ์ฉ ์ด๋ํ๊ฒ ๋๋ค)
ย ํ์ ํ์ฉ
โข
๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ๋ ์์๋๋ก ์ฒ๋ฆฌํด์ผํ ๋
โข
BFS ์๊ณ ๋ฆฌ์ฆ
โข
ํ๋ก์ธ์ค ๊ด๋ฆฌ
โข
๋๊ธฐ ์์ ๊ด๋ฆฌ
ย ๋ฑ (Deque)
๋ฑ(Deque)์ Double-Ended Queue์ ์ฝ์ด์ด๋ค.
โข
ํ์ ์(front)๊ณผ ๋ค(rear, back) ๋ชจ๋์์ ์ฝ์
๊ณผ ์ญ์ ๊ฐ ๊ฐ๋ฅํ ํ๋ฅผ ๋งํ๋ฉฐ, ๋๋ฌธ์ ์คํ์ฒ๋ผ๋ ํ์ฒ๋ผ๋ ์ฌ์ฉ ๊ฐ๋ฅ
ย ADT Deque์ ์ฐ์ฐ
1.
push_front(item) : ํ์ front์ item์ ์ถ๊ฐํ๋ค. O(1)
2.
pop_front() : front์ item์ ์ญ์ ๋ฐ ๋ฐํํ๋ค. O(1)
3.
push_rear(item) : ํ์ rear์ item์ ์ถ๊ฐํ๋ค. O(1)
4.
pop_rear() : rear์ item์ ์ญ์ ๋ฐ ๋ฐํํ๋ค. O(1)
ย Deque์ ์ฅ๋จ์
1.
๋ฐ์ดํฐ์ ์, ๋ค ๋ชจ๋์์ ์ฝ์
, ์ญ์ ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ๋ฉฐ, O(1)์ ๋น ๋ฅธ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
2.
์คํ, ํ์ ๋นํด ๊ตฌํ์ด ์ด๋ ต๋ค.
+
3.
ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ด๋ค.
4.
index๋ฅผ ํตํด ์์์ ์์์ O(1) ์๊ฐ๋ณต์ก๋๋ก ๋ฐ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
5.
์๋ก์ด ์์ ์ฝ์
์, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌํ ๋นํ๊ณ ๋ณต์ฌํ์ ์๊ณ , ์๋ก์ด ๋จ์์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก(chunk)๋ฅผ ํ ๋นํ์ฌ ์ฝ์
ํ๋ค.
ย Deque์ ํ์ฉ
โข
๋ฐ์ดํฐ๋ฅผ ์, ๋ค ๋ชจ๋์์ ์ฝ์
, ์ญ์ ํ๋ ๊ณผ์ ์ด ํ์ํ ๊ฒฝ์ฐ
โข
๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ผ ๊ฒฝ์ฐ
ย Underflow & Overflow
์๋ฃ๊ตฌ์กฐ๊ฐ ๋น์ด์์ ๋, pop()๊ณผ ๊ฐ์ ์ถ๋ ฅ์ ์๋ํ๋ฉด underflow, ์๋ฃ๊ตฌ์กฐ์ ๊ณต๊ฐ์ด ๊ฐ๋ ์ฐผ์ ๋ push()์ ๊ฐ์ ์ฝ์
์ ์๋ํ๋ฉด overflow ๋๋ฉฐ ์ค๋ฅ๋ฅผ ์ผ๊ธฐํ๋ค.