새발블로그
[백준/Java] 18258 큐 2 본문
문제
https://www.acmicpc.net/problem/18258
풀이방법
1. Queue (FIFO: First In First Out)
Queue 선언
Queue<Integer> queue = new LinkedList<>();
- LinkedList를 사용해 선언하는 것이 일반적
- PriorityQueue를 사용하면 우선순위 큐로 활용 가능
Queue 주요 메서드
메서드 설명
| offer(E e) | 큐의 끝에 요소 추가 (add()도 가능하지만, 꽉 차면 IllegalStateException 발생) |
| poll() | 큐의 첫 번째 요소 제거 후 반환 (비어있으면 null) |
| peek() | 큐의 첫 번째 요소 조회 (비어있으면 null) |
| isEmpty() | 큐가 비어있는지 확인 (true 또는 false 반환) |
| size() | 큐의 크기 반환 |
Queue 예제
import java.util.*;
public class QueueExample {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
System.out.println(queue.poll()); // 1
System.out.println(queue.peek()); // 2
System.out.println(queue.isEmpty()); // false
}
}
2. Deque (양방향 큐)
Deque 선언
Deque<Integer> deque = new LinkedList<>();
// 또는
Deque<Integer> deque = new ArrayDeque<>();
- LinkedList와 ArrayDeque 둘 다 사용 가능
- ArrayDeque가 성능상 더 유리함 (null을 허용하지 않음)
Deque 주요 메서드
메서드 설명
| offerFirst(E e) | 덱의 앞에 요소 추가 |
| offerLast(E e) | 덱의 뒤에 요소 추가 |
| pollFirst() | 덱의 앞 요소 제거 후 반환 (비어있으면 null) |
| pollLast() | 덱의 뒤 요소 제거 후 반환 (비어있으면 null) |
| peekFirst() | 덱의 앞 요소 조회 (비어있으면 null) |
| peekLast() | 덱의 뒤 요소 조회 (비어있으면 null) |
| isEmpty() | 덱이 비어있는지 확인 |
| size() | 덱의 크기 반환 |
Deque 예제
import java.util.*;
public class DequeExample {
public static void main(String[] args) {
Deque<Integer> deque = new ArrayDeque<>();
deque.offerFirst(1);
deque.offerLast(2);
deque.offerLast(3);
deque.offerFirst(0);
System.out.println(deque.pollFirst()); // 0
System.out.println(deque.pollLast()); // 3
System.out.println(deque.peekFirst()); // 1
System.out.println(deque.peekLast()); // 2
}
}
https://www.acmicpc.net/problem/10845와 풀이가 같은데 StringBuilder를 사용해서 마지막에만 출력하였다.
풀이
import java.io.*;
import java.io.BufferedReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
ArrayDeque<Integer> dq = new ArrayDeque<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
StringTokenizer stz = new StringTokenizer(br.readLine());
String cmd = stz.nextToken();
if (cmd.equals("push")) {
int num = Integer.parseInt(stz.nextToken());
dq.offer(num);
} else if (cmd.equals("pop")) {
if (dq.isEmpty()) {
sb.append(-1).append("\n");
} else {
sb.append(dq.poll()).append("\n");
}
} else if (cmd.equals("size")) {
sb.append(dq.size()).append("\n");
} else if (cmd.equals("empty")) {
sb.append(dq.isEmpty() ? 1 : 0).append("\n");
} else if (cmd.equals("front")) {
sb.append(dq.isEmpty() ? -1 : dq.peek()).append("\n");
} else if (cmd.equals("back")){
sb.append(dq.isEmpty() ? -1 : dq.peekLast()).append("\n");
}
}
System.out.print(sb.toString());
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
| [백준/Java] 1920 수 찾기 (1) | 2025.07.01 |
|---|---|
| [백준/Java] 11279 최대 힙 (0) | 2025.07.01 |
| [백준/Java] 14425 문자열 집합 (0) | 2025.03.30 |
| [백준/Java] 4949 균형잡힌 세상 (0) | 2025.03.30 |
| [백준/Java] 1541 잃어버린 괄호 (1) | 2025.03.26 |