새발블로그

큐 본문

Problem Solving/개념

EUG 2025. 7. 4. 17:27

큐 (Queue)

Queue(큐)는 데이터를 저장하는 선형 자료구조로, 선입선출(FIFO, First In First Out) 방식으로 동작

 

큐의 기본 연산

연산 설명
enqueue() 큐의 뒤(rear)에 데이터를 추가
dequeue() 큐의 앞(front)에서 데이터를 꺼냄

Java에서 큐 사용하기

1. LinkedList 기반 큐

  • java.util.LinkedList는 큐 인터페이스를 구현한 대표적인 클래스
  • 내부적으로 이중 연결 리스트(Doubly Linked List) 구조로 구현되어 있음.
import java.util.*;

Queue<Integer> queue = new LinkedList<>();

2. ArrayDeque 기반 큐

  • java.util.ArrayDeque는 동적 배열로 구현된 큐
  • 일반적으로 LinkedList보다 더 나은 성능을 제공
  • 큐뿐만 아니라 덱(Deque, 양방향 큐) 기능도 함께 제공
import java.util.*;

Queue<Integer> queue = new ArrayDeque<>();

 

일반적인 상황에서는 ArrayDeque를 사용하는 것이 더 빠르고 효율적이다.

안에 지정해주면....

 

Queue 인터페이스 - 기본 사용법

1. 큐 선언

Queue<Integer> queue = new ArrayDeque<>();

 

Queue<Integer> queue = new LinkedList<>();

 

2. 원소 추가 (enqueue)

queue.add(1);
queue.add(2);
queue.add(3);  // queue: [1, 2, 3]

 

3. 원소 제거 (dequeue)

queue.remove();  // 반환값: 1, queue: [2, 3]

 

4. 맨 앞 원소 확인 (peek)

int front = queue.peek();  // front = 2

 

5. 큐가 비었는지 확인

boolean isEmpty = queue.isEmpty();

 

코딩 테스트 유형

1. BFS (너비 우선 탐색)

  • 그래프 탐색 알고리즘의 하나인 BFS에서는 큐가 핵심 도구
  • 현재 노드와 인접한 노드들을 큐에 넣고, 큐에서 꺼내며 탐색을 진행
Queue<Integer> q = new LinkedList<>();
boolean[] visited = new boolean[n];

q.add(start);
visited[start] = true;

while (!q.isEmpty()) {
    int curr = q.remove();

    for (int next : graph[curr]) {
        if (!visited[next]) {
            visited[next] = true;
            q.add(next);
        }
    }
}

 

2. 투 포인터 문제와 큐

  • 투 포인터(Two Pointer) 알고리즘에서 큐는 슬라이딩 윈도우를 구현하는 데 유용
Queue<Integer> q1 = new LinkedList<>();
Queue<Integer> q2 = new LinkedList<>();

// 두 큐를 번갈아가며 dequeue + enqueue 하며 합을 맞춰 나감

 

'Problem Solving > 개념' 카테고리의 다른 글

해시테이블  (0) 2025.07.04
스택  (0) 2025.07.04
링크드 리스트  (0) 2025.07.04
정렬  (0) 2025.07.04
리스트  (0) 2025.07.04