문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램이다.
총 여섯 가지의 명령이 주어진다.
풀이
일단, 전에 Queue를 직접 만들어서 기능에 대해 알았지만 어떻게 문제를 풀어야 하는지 감이 오지 않았고, 검색을 했다..
package baekjoon.solution;
import java.util.LinkedList;
import java.util.Scanner;
public class Baekjoon_10845 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
LinkedList<Integer> queue = new LinkedList<>();
for(int i = 0; i <number; i++) {
String command = scanner.next();
switch(command) {
case "push":
int x = scanner.nextInt();
queue.add(x);
break;
case "pop":
if (queue.isEmpty())
System.out.println(-1);
else
System.out.println(queue.removeFirst());
break;
case "empty":
if (queue.isEmpty())
System.out.println(1);
else
System.out.println(0);
break;
case "front":
if (queue.isEmpty())
System.out.println(-1);
else
System.out.println(queue.getFirst());
break;
case "back":
if (queue.isEmpty())
System.out.println(-1);
else
System.out.println(queue.getLast());
break;
case "size":
System.out.println(queue.size());
break;
}
}
}
}
하지만 위와 같이 시간 초과가 뜬다!
if else문을 사용해도 시간초과가 뜬다.
시간 초과를 해결하기 위해서는 StringBuffer를 이용해야 한다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Baekjoon_10845 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st;
StringBuilder sb = new StringBuilder();
Queue<Integer> queue = new LinkedList<Integer>();
int back = -1;
for(int i=0;i<N;i++) {
st = new StringTokenizer(br.readLine());
String type = st.nextToken();
switch (type) {
case "push":
back = Integer.parseInt(st.nextToken());
queue.add(back);
break;
case "pop":
if (queue.isEmpty()) {
sb.append("-1").append("\n");
break;
}
sb.append(queue.poll()).append("\n");
break;
case "size":
sb.append(queue.size()).append("\n");
break;
case "empty":
sb.append(queue.isEmpty() ? 1 : 0).append("\n");
break;
case "front":
sb.append(queue.isEmpty() ? -1 : queue.peek()).append("\n");
break;
case "back":
sb.append(queue.isEmpty() ? -1 : back).append("\n");
break;
}
}
System.out.println(sb);
}
}
해결 되었다!