BOJ_18258_큐2_JAVA
문제 : 큐2
링크 : BOJ_10828_큐2
접근 방식
시간복잡도를 O(1)로 해야되기 때문에 조금 까다롭다. 자바의 Queue클래스는 LinkedList와 같이 사용해야한다.
또 다른 문제는, 자바의 Queue 클래스에서는 첫 번째 수를 구하는 peek메서드는 있어도, 마지막 수를 구하는 메서드가 존재하지 않기 때문에, 큐 문제이지만 그냥 덱을 사용했다.
풀이 방법
-
push : 생성한 queue에 offer 메서드를 통해 값을 집어넣는다.
-
pop : Integer 변수 k에 queue에서 poll 메서드로 값을 꺼내서 저장한다. Deque 클래스의 poll() 메서드는 queue가 비어있으면 null을 반환하므로, 조건문을 넣어 k가 null일 경우 -1을, null이 아닐경우 k를 출력하게 한다.
-
size : 현재 queue의 사이즈를 출력한다.
-
empty : isEmpty 메서드를 통해 queue가 비어있는 지 확인한다. 비어있다면 1을, 비어있지 않다면 0을 출력한다.
-
front : Integer 변수 k1에 peek 메서드를 통해 가장 첫번쨰 값을 읽어와 저장한다. peek 메서드는 queue가 비어있으면 null을 반환하므로, 조건문을 통해 2번 처럼 구분해준다.
-
back : Integer 변수 k11에 peekLast 메서드를 통해 queue의 마지막 값을 읽어와 저장한다. peekLast 메서드는 queue가 비어있으면 null을 반환하므로, 조건문을 통해 2번 처럼 구분해준다.
소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;
public class BOJ_18258_큐2 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Deque<Integer> queue = new LinkedList<Integer>();
int N = Integer.parseInt(in.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
String[] str = in.readLine().split(" ");
switch(str[0]) {
case "push":
queue.offer(Integer.parseInt(str[1]));
break;
case "pop":
Integer k = queue.poll();
if(k == null) {
sb.append(-1).append('\n');
}else {
sb.append(k).append('\n');
}
break;
case "size":
// 큐의 사이즈 출력
sb.append(queue.size()).append('\n');
break;
case "empty":
if(queue.isEmpty()) {
sb.append(1).append('\n');
}else{
sb.append(0).append('\n');
}
break;
case "front":
Integer k1 = queue.peek();
if(k1 == null) {
sb.append(-1).append('\n');
}else{
sb.append(k1).append('\n');
}
break;
case "back":
Integer k11 = queue.peekLast();
if(k11 == null) {
sb.append(-1).append('\n');
}else{
sb.append(k11).append('\n');
}
break;
}
}
System.out.print(sb);
}
}