문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘쨰 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
예제 입력
15 push 1 push 2 front back size empty pop pop pop size empty pop push 3 empty front
예제 출력
1 2 2 0 1 2 -1 0 1 -1 0 3
힌트
출처
- 문제를 만든 사람: baekjoon
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.concurrent.ArrayBlockingQueue;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String s = null;
ArrayQueue queue = new ArrayQueue(n);
for(int i = 0; i < n; i++){
s = br.readLine();
String[] temp = s.split(" ");
if(temp[0].equals("push")){
queue.push(Integer.parseInt(temp[1]));
}else if(temp[0].equals("pop")){
System.out.println(queue.pop());
}else if(temp[0].equals("size")){
System.out.println(queue.size());
}else if(temp[0].equals("empty")){
System.out.println(queue.empty());
}else if(temp[0].equals("front")){
System.out.println(queue.front());
}else if(temp[0].equals("back")){
System.out.println(queue.back());
}
}
br.close();
}
}
class ArrayQueue{
private int[] que;
private int rear = 0;
private int temp;
public ArrayQueue(int n){
que = new int[n];
}
public void push(int value){
que[rear++] = value;
}
public int pop(){
if(rear == 0){
return -1;
}else{
temp = que[0];
for(int i = 0; i < rear; i++){
que[i] = que[i+1];
}
rear--;
return temp;
}
}
public int size(){
return rear;
}
public int empty(){
if(rear == 0){
return 1;
}else{
return 0;
}
}
public int front(){
if(rear == 0){
return -1;
}else{
return que[0];
}
}
public int back(){
if(rear == 0){
return -1;
}else{
return que[rear-1];
}
}
}
'알고리즘(Java) > 큐' 카테고리의 다른 글
| 백준 1060 DFS와 BFS★ (0) | 2017.11.20 |
|---|