๐ก ๊ณต๋ถํ๊ฒ ๋ ๋ฐฐ๊ฒฝ
์ฝ๋ฉํ ์คํธ๋ฅผ ์ค๋นํ๋ ค๊ณ ํ๋ก๊ทธ๋๋จธ์ค์์ ๋ฌธ์ ๋ฅผ ํ๊ณ ์์๋ค. ๊ทธ๋ฐ๋ฐ ์คํ/ํ ๊ฐ๋ ์ด ํ์ํ ๋ฌธ์ ๋ฅผ ๋ง์ฃผํ๊ฒ ๋์๊ณ , ํด๋น ๊ฐ๋ ์ ์ ์์ง ๋ชปํ๋ ๋๋ ๋ฌธ์ ๋ฅผ ํ์ง ๋ชปํ๊ณ ๊ทธ๋๋ก ๋ฒฝ์ ๋ถ๋ชํ๊ฒ ๋์๋ค. ๋จ์ํ ๋ฌธ์ ๋ง ๊ณ์ ํธ๋ ๊ฑด ํ๊ณ๊ฐ ์๋ค๋ ๊ฑธ ๋๊ผ๊ณ , "๊ฐ๋ ์ ๋จผ์ ์ ๋๋ก ์ก๊ณ ๋ฌธ์ ๋ฅผ ํ์!"๋ ๋ง์์ผ๋ก ์คํ ๊ณต๋ถ๋ฅผ ์์ํ๊ฒ ๋์๋ค.
๐ฆ Stack,, ๊ทธ๋์ ๊ทธ๊ฒ ๋๋์ฒด ๋ญ๋ฐ?!
Stack ์ปฌ๋ ์
์คํ(Stack)์ ๋ง ๊ทธ๋๋ก '์๋ค', '๋๋ฏธ'๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์๋ค.
์์๋ฅผ ํ๋์ฉ ์๋ก ์์ ์ฌ๋ฆฌ๋ฏ์ด, ๋ฐ์ดํฐ๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ํ ๋ฐฉํฅ์ผ๋ก๋ง ์๊ณ ๊บผ๋ด๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค!
LIFO(Last In First Out) ๊ตฌ์กฐ๋ ๋ญ์ง..?!
์คํ์ LIFO ๊ตฌ์กฐ์ด๋ค.
๋ง ๊ทธ๋๋ก ๋ง์ง๋ง์ ๋ฃ์ ๋ฐ์ดํฐ๊ฐ ์ ์ผ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ์ด๋ค!
๐ Stack์ ์ด๋์์ ์ฐ์ผ๊น?
Java๋ฅผ ๊ณต๋ถํ๋ฉด์ ์๋ฐ ๊ฐ์ ๋จธ์ (JVM)์ Runtime Data Area ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์ธ ๋, ๊ทธ ์ค ํ๋๋ก Stack ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค์ด๋ณธ ์ ์ด ์๋ค.
Stack ๋ฉ๋ชจ๋ฆฌ๋ ์ง์ญ ๋ณ์์ ํธ์ถ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ธ๋ฐ, ๊ฐ์ฅ ๋ง์ง๋ง์ ์ด ์ง์ญ ๋ณ์๋ฅผ ๋จผ์ ์ ๊ฑฐํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฆ, Stack์ ๊ตฌ์กฐ์ ํน์ฑ์ด ์ค์ ํ๋ก๊ทธ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์๋ ๊ทธ๋๋ก ์ฐ์ด๊ณ ์๋ค!
์ด๊ฒ ๋ฐ๋ก ์คํ์ด ๋จ์ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋์ด, ์ค์ ์คํ ํ๊ฒฝ์์๋ ์ค์ํ ์ญํ ์ ํ๊ณ ์๋ค๋ ์๋ฏธ์ด๋ค.
โ Java์ Stack ํด๋์ค
Java์์ Stack ํด๋์ค๊ฐ ์ ๊ณต๋๋ค.
์ด ํด๋์ค๋ Vector ํด๋์ค๋ฅผ ์์๋ฐ๊ณ ์์ด์, ๊ธฐ๋ณธ์ ์ผ๋ก Thread-Safe ํ๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
์ฆ, ์ฌ๋ฌ ์ค๋ ๋์์ ๋์์ ์ ๊ทผํด๋ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค!
์ต๊ทผ์๋ Deque๋ LinkedList๋ฅผ ์คํ์ฒ๋ผ ์ฐ๋ ๊ฒฝ์ฐ๋ ๋ง์ด ์๋ค ๐
๐ ๏ธ Stack์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ ๊ฑธ๊น?
Java์์๋ java.util.Stack ํด๋์ค๋ฅผ ์ฌ์ฉํด์ ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ ์ ์๋ค.
import java.util.Stack;
๐ ์ฃผ์ ๋ฉ์๋ ์ ๋ฆฌ
- empty() : Stack์ด ๋น์ด์๋์ง ํ์ธํ๋ค. ๋น์ด์์ผ๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ฐํํ๋ค!
- push(Object item) : Stack์ ๊ฐ์ฒด(item)๋ฅผ ์ ์ฅํ๋ค. ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ ์๋ ๋์์ด๋ค!
- peek() : Stack์ ์ต์๋จ ๊ฐ์ ๋ฐํํ๋ค. ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ง๋ ์๋๋ค!
Stack์ด ๋น์ด ์๋ค๋ฉด EmptyStackException์ด ๋ฐ์ํ๋ค. - pop() : Stack์ ์ต์๋จ ๊ฐ์ ๊บผ๋ธ๋ค. ๊บผ๋ด๋ฉด์ ๊ฐ์ด ์ญ์ ๋๋ค!
Stack์ด ๋น์ด ์๋ค๋ฉด EmptyStackException์ด ๋ฐ์ํ๋ค. - size() : ํ์ฌ Stack์ ์์ฌ ์๋ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์๋ ค์ค๋ค!
์คํ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ํน์ง
Stack ํด๋์ค๋ ๋ด๋ถ์ ์ผ๋ก ๋์ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ ์์ด์,
ArrayList์ฒ๋ผ ์ฌ์ด์ฆ๋ฅผ ๋ฏธ๋ฆฌ ์ ํ์ง ์์๋ ๋๋ค!
์คํ์ด ์ฒ์ ์์ฑ๋๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก 10๊ฐ์ ๊ณต๊ฐ์ด ํ ๋น๋๋ค.
๋ฐ์ดํฐ๊ฐ 10๊ฐ๋ฅผ ๋์ด๊ฐ๋ค๋ฉด?!
๐ ํ์ฌ ์ฌ์ด์ฆ์ 2๋ฐฐ ํฌ๊ธฐ๋ก ์๋ ํ์ฅ๋๊ณ , ๊ธฐ์กด ๋ฐ์ดํฐ๋ ์๋ก์ด ๊ณต๊ฐ์ ๋ณต์ฌ๋๋ค!
๋๋ถ์ ์ ์ฐํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๊ณ , ์ค์ ์ฝ๋ฉํ ์คํธ๋ ์ค๋ฌด์์๋ ๋ง์ด ์ฌ์ฉ๋๋ค!
๐ Stack ๋์ Deque๋ฅผ ์ฌ์ฉํ์!!
Java ๊ณต์ ๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด, ์ฌ์ค Stack ํด๋์ค๋ ์์ ์ค๊ณ๊ฐ ์๋ชป๋ ํด๋์ค๋ผ๊ณ ๋์ ์๋ค.
Vector๋ฅผ ์์๋ฐ์๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ๊ฒ ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ ๋์ด ์๊ณ , ์ค๋๋ ๋ฐฉ์์ด๋ผ ์ง๊ธ์ Deque๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ณต์์ผ๋ก ๊ถ์ฅํ๊ณ ์๋ค!
Deque๊ฐ ๋ญ์ง..?
Deque(Double-Ended Queue)๋ ์์ชฝ ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋บ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค!
ํ(Queue)๋ก๋, ์คํ(Stack)์ผ๋ก๋ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค!
์ํฉ์ ๋ฐ๋ผ ์ ๋ง๋๋ก ์ฐ๊ธฐ ๋ฑ ์ข๋ค ๐
Deque๋ฅผ Stack์ฒ๋ผ ์ฌ์ฉํ๊ธฐ
Deque<String> stack = new ArrayDeque<>();
stack.push("a");
stack.push("b");
stack.push("c");
stack.push("d");
stack.push("e");
System.out.println(stack); // [a, b, c, d, e]
System.out.println(stack.pop()); // e
System.out.println(stack.pop()); // d
System.out.println(stack); // [a, b, c]
Deque๋ฅผ Queue์ฒ๋ผ ์ฌ์ฉํ๊ธฐ
Deque<String> queue = new ArrayDeque<>();
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer("e");
System.out.println(queue); // [a, b, c, d, e]
System.out.println(queue.poll()); // a
System.out.println(queue.poll()); // b
System.out.println(queue); // [c, d, e]
์ฌ์ฉ ๋ฐฉ์ | ๋ฉ์๋ | ๊ตฌ์กฐ | ์ค๋ช |
Stack์ฒ๋ผ | push(), pop() | LIFO | ๋์ค์ ๋ฃ์ ๋ฐ์ดํฐ๋ถํฐ ๊บผ๋ |
Queue์ฒ๋ผ | offer(), poll() | FIFO | ๋จผ์ ๋ฃ์ ๋ฐ์ดํฐ๋ถํฐ ๊บผ๋ |
๐ References
๐งฑ ์๋ฐ Stack ๊ตฌ์กฐ & ์ฌ์ฉ๋ฒ ์ ๋ฆฌ
Stack ์ปฌ๋ ์ ์คํ(Stack)์ ์ฌ์ ์ ์ ์๋ '์๋ค', '๋๋ฏธ' ๋ก์ ์ ์ ์คํ์ฒ๋ผ ์ ์๋ฅผ ์์๋์ ๊ฒ์ ๋งํ๋ค. ์ฆ, ์์์ ๋ฌผ๊ฑด์ ์์ ์ฌ๋ฆฌ๋ฏ์ด ๋ฐ์ดํฐ๋ฅผ ์๋ ์๋ฃ ๊ตฌ์กฐ๋ผ๊ณ ํ ์ ์๋ค. ์๋ ๊ทธ๋ฆผ
inpa.tistory.com
https://www.programiz.com/dsa/stack
Stack Data Structure and Implementation in Python, Java and C/C++
A stack is a linear data structure that follows the principle of Last In First Out (LIFO). This means the last element inserted inside the stack is removed first. You can think of the stack data structure as the pile of plates on top of another. Stack repr
www.programiz.com