https://www.acmicpc.net/problem/18258
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
풀이과정
명령에 따라 기본적인 큐의 연산을 수행할 수 있어야 하는 듯 하다.
굉장히 직관적인 문제이므로 문제에서 요구하는 대로 작성하여 풀이하였다. 먼저 6가지 명령을 메서드로 만들어 명령이 들어올 때마다 맞는 메서드를 호출하게끔 하였다.
public class Main {
static int[] queue;
static int frontIndex = 0;
static int backIndex = -1;
// push X
public static void push( int num ){
queue[++backIndex] = num;
}
// pop
public static int pop(){
if( backIndex == -1 || frontIndex > backIndex )
return -1;
else
return queue[frontIndex++];
}
// size
public static int size(){
if( backIndex == -1 || frontIndex > backIndex )
return 0;
else
return backIndex+1 - frontIndex;
}
// empty
public static int empty(){
if( backIndex == -1 || frontIndex > backIndex )
return 1;
else
return 0;
}
// front
public static int front(){
if( backIndex == -1 || frontIndex > backIndex )
return -1;
else
return queue[frontIndex];
}
// back
public static int back(){
if( backIndex == -1 || frontIndex > backIndex )
return -1;
else
return queue[backIndex];
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
queue = new int[N];
while( N-- > 0 ){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String order = st.nextToken();
switch ( order ){
case "push":
push(Integer.parseInt(st.nextToken()));
break;
case "pop":
sb.append(pop()).append("\n");
break;
case "size":
sb.append(size()).append("\n");
break;
case "empty":
sb.append(empty()).append("\n");
break;
case "front":
sb.append(front()).append("\n");
break;
case "back":
sb.append(back()).append("\n");
break;
}
}
System.out.println(sb);
}
한가지 주의해야할 점은 push 명령이 들어올 때는 공백을 포함한 정수가 함께 주어지는데, 이는 StringTokenizer 클래스로 해결하였다. 첫 번째 토큰에 "push" 명령이 들어온다면 공백을 포함한 정수가 존재하므로 nextToken()을 호출하여 push() 메서드에 매개변수로 넘겨줄 수 있다.