問題 - クュ(Queue)
整数を格納するキューを実装し、与えられるコマンドを処理するプログラムを作成してください。
コマンドは、下の計6つです。
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 |
下は私の答案です。
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.StringTokenizer;
public class algo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
Queue<Integer> q = new LinkedList<>();
int i = 0;
sc.nextLine();
while (i < num) {
String comand = sc.nextLine();
StringTokenizer st = new StringTokenizer(comand, " ");
String firstHalf = st.nextToken();
String secondHalf = "";
if(st.hasMoreElements()) {
secondHalf= st.nextToken();
}
switch (firstHalf) {
case "push":
q.add(Integer.parseInt(secondHalf));
break;
case "pop":
System.out.println(q.isEmpty() ? -1 : q.poll());
break;
case "size":
System.out.println(q.size());
break;
case "empty":
System.out.println(q.isEmpty() ? 1 : 0);
break;
case "front":
if(q.isEmpty()){
System.out.println("-1");
} else {
System.out.println(((LinkedList<Integer>) q).getFirst());
}
break;
case "back":
if(q.isEmpty()){
System.out.println("-1");
} else {
System.out.println(((LinkedList<Integer>) q).getLast());
}
break;
default:
System.out.println("Error");
break;
}
i++;
}
}
}
最初は自分でキューを作ってみるつもりだったんですが
時間が掛かりすぎて途中に変えました。
時間がある時、やってみたいと思います。
10845 | 正しいです!! | メモリ : 44316 KB | 所要時間 : 460 MS |
댓글 없음:
댓글 쓰기