π μ€ν(Stack)κ³Ό ν(Queue)λ 무μμΈκ°μ?
μ€ν(Stack)κ³Ό ν(Queue)λ μ»΄ν¨ν° 곡νμμ λ§€μ° μ€μν λ°μ΄ν° ꡬ쑰 μ€ νλμμ. μ΄ λ ꡬ쑰λ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ²λ¦¬νλ λ°©μμ μ μνλ©°, κ°κ°μ μ¬μ© λ°©μμ΄ λ€λ₯΄μ§λ§ μμμ μ΄μ μ λ§μΆκ³ μμ΄μ. νΉν, μ€νμ "λ§μ§λ§μ λ£μ κ²μ΄ κ°μ₯ λ¨Όμ λμ¨λ€"λ LIFO (Last In, First Out) μμΉμ λ°λ₯΄κ³ , νλ "λ¨Όμ λ£μ κ²μ΄ κ°μ₯ λ¨Όμ λμ¨λ€"λ FIFO (First In, First Out) μμΉμ λ°λ₯΄μ£ .
λΉμ λ₯Ό λ€μ΄ μ€λͺ νμλ©΄, μ€νμ μ μλ₯Ό μμ μ¬λ¦¬λ κ²κ³Ό λΉμ·ν΄μ. λ§μ§λ§μ μμ μ μλ₯Ό λ¨Όμ κΊΌλ΄μΌ νμ£ . λ°λ©΄, νλ μ€μ μλ κ²κ³Ό κ°μμ. λ¨Όμ μ€μ μ μ¬λμ΄ λ¨Όμ μλΉμ€λ₯Ό λ°λ μμΉμ λ°λ₯΄μ£ . μ΄μ μ€νκ³Ό νμ κ°λ μ λ κΉμ΄ μ΄ν΄λ³΄κ³ , κ°κ°μ νΉμ§κ³Ό μ¬μ© μλ₯Ό μμλ³Όκ²μ.
π₯οΈ μ€ν(Stack)κ³Ό ν(Queue)μ κ°λ κ³Ό μμ
1. μ€νμ΄λ?
μ€ν(Stack)μ LIFO(Last In, First Out) μμΉμ λ°λ₯΄λ μλ£κ΅¬μ‘°μμ. μ¦, λ§μ§λ§μ μΆκ°λ λ°μ΄ν°κ° κ°μ₯ λ¨Όμ μ κ±°λΌμ. μ€νμμ μ£Όλ‘ μ¬μ©νλ μ°μ°μ push(λ°μ΄ν° μΆκ°)μ pop(λ°μ΄ν° μ κ±°)μμ.
μ€νμ μ£Όμ μ°μ°:
- push: μ€νμ λ°μ΄ν°λ₯Ό μΆκ°νλ μ°μ°
- pop: μ€νμμ λ°μ΄ν°λ₯Ό μ κ±°νκ³ λ°ννλ μ°μ°
- peek: μ€νμ κ°μ₯ μμ μλ λ°μ΄ν°λ₯Ό νμΈνλ μ°μ° (μ κ±°νμ§ μμ)
// κ°λ¨ν μ€ν ꡬν μμ
class Stack {
constructor() {
this.items = [];
}
// μ€νμ λ°μ΄ν° μΆκ°
push(element) {
this.items.push(element);
}
// μ€νμμ λ°μ΄ν° μ κ±° (LIFO)
pop() {
if (this.isEmpty()) {
return "μ€νμ΄ λΉμ΄μμ΅λλ€.";
}
return this.items.pop();
}
// μ€νμ 맨 μμ μλ λ°μ΄ν° νμΈ
peek() {
if (this.isEmpty()) {
return "μ€νμ΄ λΉμ΄μμ΅λλ€.";
}
return this.items[this.items.length - 1];
}
// μ€νμ΄ λΉμ΄μλμ§ νμΈ
isEmpty() {
return this.items.length === 0;
}
}
// μ€ν μ¬μ© μμ
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.peek()); // 3 (κ°μ₯ μ΅κ·Όμ μΆκ°λ μμ)
console.log(stack.pop()); // 3 (κ°μ₯ μ΅κ·Όμ μΆκ°λ μμ μ κ±°)
console.log(stack.pop()); // 2
μ΄ μμ μμλ κ°λ¨ν μ€νμ ꡬννμ΄μ.
push λ©μλλ‘ λ°μ΄ν°λ₯Ό μ€νμ μΆκ°νκ³ , pop λ©μλλ‘ λ°μ΄ν°λ₯Ό μ κ±°ν΄μ.
κ°μ₯ λ§μ§λ§μ μΆκ°λ λ°μ΄ν°κ° λ¨Όμ μ κ±°λλ―λ‘, LIFO μμΉμ λ°λ₯΄κ³ μμ΄μ.
2. ν(Queue)λ?
ν(Queue)λ FIFO(First In, First Out) μμΉμ λ°λ₯΄λ μλ£κ΅¬μ‘°μμ. μ¦, κ°μ₯ λ¨Όμ μΆκ°λ λ°μ΄ν°κ° κ°μ₯ λ¨Όμ μ κ±°λΌμ. νμμ μ£Όλ‘ μ¬μ©νλ μ°μ°μ enqueue(λ°μ΄ν° μΆκ°)μ dequeue(λ°μ΄ν° μ κ±°)μμ.
νμ μ£Όμ μ°μ°:
- enqueue: νμ λμ λ°μ΄ν°λ₯Ό μΆκ°νλ μ°μ°
- dequeue: νμ μμμ λ°μ΄ν°λ₯Ό μ κ±°νκ³ λ°ννλ μ°μ°
- front: νμ κ°μ₯ μμ μλ λ°μ΄ν°λ₯Ό νμΈνλ μ°μ° (μ κ±°νμ§ μμ)
// κ°λ¨ν ν ꡬν μμ
class Queue {
constructor() {
this.items = [];
}
// νμ λ°μ΄ν° μΆκ° (FIFO)
enqueue(element) {
this.items.push(element);
}
// νμμ λ°μ΄ν° μ κ±° (FIFO)
dequeue() {
if (this.isEmpty()) {
return "νκ° λΉμ΄μμ΅λλ€.";
}
return this.items.shift();
}
// νμ 맨 μμ μλ λ°μ΄ν° νμΈ
front() {
if (this.isEmpty()) {
return "νκ° λΉμ΄μμ΅λλ€.";
}
return this.items[0];
}
// νκ° λΉμ΄μλμ§ νμΈ
isEmpty() {
return this.items.length === 0;
}
}
// ν μ¬μ© μμ
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.front()); // 1 (κ°μ₯ λ¨Όμ μΆκ°λ μμ)
console.log(queue.dequeue()); // 1 (κ°μ₯ λ¨Όμ μΆκ°λ μμ μ κ±°)
console.log(queue.dequeue()); // 2
μ΄ μμ μμλ κ°λ¨ν νλ₯Ό ꡬννμ΄μ.
enqueue λ©μλλ‘ λ°μ΄ν°λ₯Ό νμ λμ μΆκ°νκ³ , dequeue λ©μλλ‘ νμ μμμ λ°μ΄ν°λ₯Ό μ κ±°ν΄μ.
νλ FIFO μμΉμ λ°λ₯΄λ―λ‘, κ°μ₯ λ¨Όμ μΆκ°λ λ°μ΄ν°κ° κ°μ₯ λ¨Όμ μ κ±°λΌμ.
π€ μ€ν(Stack)κ³Ό ν(Queue)μ μ°¨μ΄μ
μ€νκ³Ό νλ λͺ¨λ λ°μ΄ν°λ₯Ό μ μ₯νλ λ°©μμ΄μ§λ§, λ°μ΄ν°κ° μ²λ¦¬λλ μμμμ ν° μ°¨μ΄λ₯Ό 보μ¬μ. κ° μλ£κ΅¬μ‘°μ νΉμ§μ νλμ λΉκ΅ν΄λ³Όκ²μ.
μλ£κ΅¬μ‘° | λ°μ΄ν° μ²λ¦¬ λ°©μ | μ£Όμ μ°μ° |
μ€ν | LIFO (λ§μ§λ§μ μΆκ°λ λ°μ΄ν°κ° λ¨Όμ μ κ±°λ¨) | push, pop, peek |
ν | FIFO (λ¨Όμ μΆκ°λ λ°μ΄ν°κ° λ¨Όμ μ κ±°λ¨) | enqueue, dequeue, front |
1. μΈμ μ€νμ μ¬μ©ν κΉ?
- μ€νμ νμ
μ μΆ(LIFO) λ°©μμ΄ νμν μν©μμ μ¬μ©λΌμ. μλ₯Ό λ€μ΄:
- μΉ λΈλΌμ°μ μ λ€λ‘ κ°κΈ°/μμΌλ‘ κ°κΈ° κΈ°λ₯: μ΅κ·Όμ λ°©λ¬Έν νμ΄μ§λΆν° λ¨Όμ λμκ°κ² λΌμ.
- ν¨μ νΈμΆ μ€ν: ν¨μ νΈμΆμ΄ λλλ©΄ λ§μ§λ§μ νΈμΆλ ν¨μλΆν° λ°νλΌμ.
2. μΈμ νλ₯Ό μ¬μ©ν κΉ?
- νλ μ μ
μ μΆ(FIFO) λ°©μμ΄ νμν μν©μμ μ¬μ©λΌμ. μλ₯Ό λ€μ΄:
- νλ¦°ν° λκΈ°μ΄: λ¨Όμ λ€μ΄μ¨ μΈμ μμ μ΄ λ¨Όμ μ²λ¦¬λΌμ.
- μ½μΌν° λκΈ°μ€: λ¨Όμ μ νλ₯Ό 건 κ³ κ°μ΄ λ¨Όμ μλ΄μ λ°κ² λΌμ.
π¨ μ£Όμν μ
μ€νκ³Ό νλ₯Ό μ¬μ©ν λ κ³ λ €ν΄μΌ ν λͺ κ°μ§ μ€μν μ¬νμ΄ μμ΄μ.
- λ©λͺ¨λ¦¬ κ΄λ¦¬: μ€νκ³Ό ν λͺ¨λ λ°μ΄ν°κ° κ³μ μμ΄κΈ°λ§ νλ©΄ λ©λͺ¨λ¦¬ λΆμ‘±μ΄ λ°μν μ μμ΄μ. νΉν, μ€νμ μ¬κ· ν¨μμ²λΌ κΉμ΄ μ€μ²©λ κ²½μ° μ€ν μ€λ²νλ‘μ° λ¬Έμ κ° λ°μν μ μμ΄μ.
- μ¬λ°λ₯Έ μλ£κ΅¬μ‘° μ ν: λ¬Έμ μ μ±κ²©μ λ°λΌ μ€νκ³Ό ν μ€ μ΄λ€ μλ£κ΅¬μ‘°κ° μ ν©νμ§ μ μ€ν κ³ λ €ν΄μΌ ν΄μ. μλͺ»λ μλ£κ΅¬μ‘°λ₯Ό μ ννλ©΄ μ±λ₯μ΄ μ νλκ±°λ, 볡μ‘ν μ½λκ° λ μ μμ΄μ.
- μ¬μ© λΉλ: μ€νκ³Ό νλ λ§€μ° κΈ°λ³Έμ μΈ μλ£κ΅¬μ‘°μ΄μ§λ§, μ€μ νλ‘μ νΈμμ νΉμ μλ리μ€μ λ§κ² μ μ ν λ³νλ ννλ‘ μμ£Ό μ¬μ©λΌμ. μλ₯Ό λ€μ΄, μ°μ μμ νλ μ΄μ€ μ€ν κ°μ λ³νλ μλ£κ΅¬μ‘°λ₯Ό μ¬μ©νκ² λ μλ μμ΄μ.
π κ²°λ‘
μ€νκ³Ό νλ μλ°μ€ν¬λ¦½νΈμμ λ§€μ° μ€μν μλ£κ΅¬μ‘°μμ. μ€νμ LIFO μμΉμ λ°λ₯΄λ©°, νλ FIFO μμΉμ λ°λ¦ λλ€. κ°κ°μ μλ£κ΅¬μ‘°λ νΉμ μν©μ λ§κ² μ¬μ©λλ©°, λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ λ° μμ΄ λ§€μ° μ μ©ν΄μ.
μ€νμ μ£Όλ‘ νμ μ μΆ λ°©μμ΄ νμν μν©μμ, νλ μ μ μ μΆ λ°©μμ΄ νμν μν©μμ μ¬μ©λΌμ. μ΄ λ κ°μ§ μλ£κ΅¬μ‘°μ κ°λ μ λͺ ννκ² μ΄ν΄νλ©΄, λ°μ΄ν°λ₯Ό ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νκ³ λ¬Έμ ν΄κ²°μ ν° λμμ΄ λ κ±°μμ.
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!