코테

Stack과 Queue란?

0and24 2024. 11. 30. 14:20

출처: https://www.theknowledgeacademy.com/blog/stack-vs-queue/

안녕하세요! 오늘은 자료구조에서 꼭 배우는 Stack(스택)과 Queue(큐)에 대해 알아보겠습니다.
일상에서 쉽게 접할 수 있는 예시와 함께 이해해 봅시다! 😊

1. Stack(스택)이란?

출처: https://www.geeksforgeeks.org/stack-data-structure/?ref=header_outind

Stack은 LIFO(Last In, First Out) 구조입니다.

"마지막에 들어간 것이 가장 먼저 나온다"는 뜻이에요.

📦 일상 속 스택 예시:

프링글스 과자를 떠올려보세요.

  • 공장에서는 아래부터 과자를 담아 포장을 하게 됩니다.
  • 먹는 사람은 과자를 꺼낼때 제일 위에 있는 과자를 먼저 꺼내게 됩니다.

이처럼, Stack은 데이터를 위에서 쌓고 꺼내는 방식이에요.

 

🛠 스택의 주요 동작

  1. Push: 데이터를 스택에 넣는다.
  2. Pop: 데이터를 스택에서 꺼낸다.
  3. Peek: 가장 위에 있는 데이터를 확인한다(꺼내지는 않음).

💻 코드로 보는 스택

파이썬의 리스트를 활용한 간단한 예제를 볼까요?

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        // 데이터를 스택에 넣기 (Push)
        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println("Stack after push: " + stack);  // [1, 2, 3]

        // 데이터를 스택에서 꺼내기 (Pop)
        int lastItem = stack.pop();
        System.out.println("Popped item: " + lastItem);    // 3
        System.out.println("Stack after pop: " + stack);   // [1, 2]

        // 스택의 가장 위 데이터 확인 (Peek)
        int topItem = stack.peek();
        System.out.println("Peeked item: " + topItem);     // 2
        System.out.println("Stack after peek: " + stack);  // [1, 2]
    }
}

2. Queue(큐)란?

출처: https://www.geeksforgeeks.org/queue-data-structure/

Queue는 FIFO(First In, First Out) 구조입니다.

"먼저 들어간 것이 가장 먼저 나온다"는 뜻이에요.

📦 일상 속 큐 예시:

줄 서기를 생각해보세요!

  • 먼저 줄을 선 사람이 먼저 서비스를 받습니다.
  • 뒤에 줄 선 사람은 차례를 기다려야 하죠.

이처럼 Queue는 데이터를 줄 세우는 방식입니다.


🛠 주요 동작 (Java에서의 큐 메서드 이름)

  1. add / offer: 데이터를 큐에 넣습니다.
    • add: 큐가 가득 차 있으면 예외(IllegalStateException)를 발생시킵니다.
    • offer: 큐가 가득 차 있으면 false를 반환합니다.
  2. poll: 데이터를 큐에서 꺼냅니다.
    • 데이터가 없으면 null을 반환합니다.
  3. peek: 큐의 첫 번째 데이터를 확인합니다.
    • 데이터를 제거하지 않으며, 큐가 비어 있으면 null을 반환합니다.
import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();

        // 데이터를 큐에 넣기 (add)
        queue.add(1);
        queue.add(2);
        queue.add(3);
        System.out.println("Queue after enqueue: " + queue);// [1, 2, 3]

        // 데이터를 큐에서 꺼내기 (poll)
        int firstItem = queue.poll();
        System.out.println("Dequeued item: " + firstItem);   //  1
        System.out.println("Queue after dequeue: " + queue); // [2, 3]

        // 큐의 첫 번째 데이터 확인 (peek)
        int frontItem = queue.peek();
        System.out.println("Peeked item: " + frontItem);   // 2
        System.out.println("Queue after peek: " + queue);  // [2, 3]
    }
}

3. 스택과 큐의 차이점

특징Stack (스택)Queue (큐)

특징 Stack (스택) Queue (큐)
원리 LIFO (Last In, First Out) FIFO (First In, First Out)
예시 책 더미 줄 서기
사용법 push, pop, peek add/offer, poll, peek

4. 언제 스택과 큐를 사용할까요?

✅ 스택 사용 사례

  1. 웹 브라우저의 뒤로 가기
    • 방문한 페이지를 스택에 저장하고, 뒤로 가기를 누르면 마지막 페이지부터 돌아갑니다.
  2. Undo(되돌리기)
    • 작업 기록을 스택에 저장하고, 되돌릴 때 마지막 작업을 꺼냅니다.

✅ 큐 사용 사례

  1. 프린터 작업 대기열
    • 먼저 들어온 작업부터 출력됩니다.
  2. 멀티플레이 게임 대기열
    • 대기열에 등록된 순서대로 플레이어가 참가합니다.

5. 요약

  • 스택(Stack): LIFO 구조로, "마지막에 넣은 것이 먼저 나온다."
  • 큐(Queue): FIFO 구조로, "먼저 넣은 것이 먼저 나온다."
  • 일상 예시
    • 스택: 책 더미
    • 큐: 줄 서기

6. 연관 코테 문제들 (Stack vs Queue)

 

'코테' 카테고리의 다른 글

Hash Set이란?  (1) 2024.11.18