문제링크
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
문제해석
Queue를 기반으로 메서드를 활용해보는 문제입니다. 해당 문제에서는 "back"과 같은 가장 뒤의 값을 확인하는 경우가 있기에, 앞 뒤로 값을 자유롭게 추가하고 제거할 수 있는 "Deque" 자료구조를 활용하게 되었습니다.
사용하는 메서드가 peekFirst( ), peekLast( ) 등을 활용하고 있는데, 값이 존재하지 않을 경우 null을 반환하게 되므로 해당 경우에는 -1을 출력하는 식으로 코드를 구현하였습니다.
※ addFirst( ), addLast( ), removeFirst( ), removeLast( ) 메서드는 Exception을 반환하게 됩니다!
코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
Deque<Integer> deque = new ArrayDeque<>();
for (int i = 0; i < num; i++) {
String order = br.readLine();
if (order.contains("push")) {
StringTokenizer st = new StringTokenizer(order);
String push = st.nextToken();
int number = Integer.parseInt(st.nextToken());
deque.offer(number);
}
else if (order.contains("front")) {
if (deque.peekFirst() == null) {
System.out.println(-1);
}
else {
System.out.println(deque.peekFirst());
}
}
else if (order.contains("back")) {
if (deque.peekLast() == null) {
System.out.println(-1);
}
else {
System.out.println(deque.peekLast());
}
}
else if (order.contains("size")) {
System.out.println(deque.size());
}
else if (order.contains("pop")) {
try {
System.out.println(deque.removeFirst());
}
catch (Exception e) {
System.out.println(-1);
}
}
else if (order.contains("empty")) {
if (deque.isEmpty()) { // 결과가 True, False로 출력됨
System.out.println(1);
}
else {
System.out.println(0);
}
}
};
}
}'코딩테스트 > 백준' 카테고리의 다른 글
| [JAVA] 2606번 바이러스 (0) | 2023.08.31 |
|---|---|
| [JAVA] 2579번 계단 오르기 (0) | 2023.08.22 |
| [JAVA] 1018번 체스판 다시 칠하기 (0) | 2023.07.18 |
| [JAVA] 1934번 최소공배수 (0) | 2023.06.30 |
| [JAVA] 2908번 상수 (0) | 2023.02.12 |