[Java]伯俊10866号


白駿10866号


デッキ


質問する


整数を格納するDequeを実行し、入力としてのコマンドを処理するプログラムを作成します.
命令は全部で8条ある.
push frontX:整数Xをインデックスの前に配置します.
push back X:整数Xをインデックスの後ろに置きます.
pop front:インデックスの一番前の数字を削除し、その数字を出力します.インデックスに整数がない場合は、-1が出力されます.
pop back:インデックスの一番後ろの数字を減算し、その数字を出力します.インデックスに整数がない場合は、-1が出力されます.
size:インデックス内の整数の個数を出力します.
≪NULL|Empty|oem_src≫:索引がNULLの場合、1または0が出力されます.
front:インデックスの一番前の整数を出力します.インデックスに整数がない場合は、-1が出力されます.
back:インデックスの一番後ろの整数を出力します.インデックスに整数がない場合は、-1が出力されます.

入力


1行目に与えられるコマンド数N(1≦N≦10000).2行目からN行目までそれぞれ1つのコマンドがあります.与えられた整数は1以上であり、100000以下である.問題にない命令はない.

しゅつりょく


出力するコマンドが発行されるたびに、各行に1つのコマンドが出力されます.



コード#コード#

import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		ArrayDeque<Integer> deque = new ArrayDeque<Integer>();
		StringBuilder sb = new StringBuilder();
		
		int N = Integer.parseInt(br.readLine());
		
		for(int i=0; i<N; i++) {
			String[] str = br.readLine().split(" ");
			
			switch(str[0]) {
				case "push_front": {
					deque.addFirst(Integer.parseInt(str[1]));
					break;
				}
				case "push_back": {
					deque.addLast(Integer.parseInt(str[1]));
					break;
				}
				case "pop_front": {
					if(deque.isEmpty())
						sb.append(-1).append('\n');
					else
						sb.append(deque.pollFirst()).append('\n');
					
					break;
				}
				case "pop_back": {
					if(deque.isEmpty())
						sb.append(-1).append('\n');
					else
						sb.append(deque.pollLast()).append('\n');
				
					break;
				}
				case "size": {
					sb.append(deque.size()).append('\n');
					break;
				}
				case "empty": {
					if(deque.isEmpty())
						sb.append(1).append('\n');
					else
						sb.append(0).append('\n');
					
					break;
				}
				case "front": {
					if(deque.isEmpty())
						sb.append(-1).append('\n');
					else
						sb.append(deque.peekFirst()).append('\n');
					
					break;
				}
				case "back": {
					if(deque.isEmpty())
						sb.append(-1).append('\n');
					else
						sb.append(deque.peekLast()).append('\n');
					
					break;
				}
			}
		}
		
		System.out.println(sb);
	}	
}

に答える

Queueは一方向の資料構造であり、先入先出の特徴を持っている.他方が挿入・削除できない特性を補うために生じた資料構造はDeque(덱)である.
インデックスはDouble-Ended Queueの略です.addFirst():フロントエンドに挿入addLast():背面を挿入isEmpty():Dequeが空ですpeekFirst():frontの要素が返されます.peekLast():背面の要素を返しますsize():DequeサイズpollFirst():frontの要素の除去と復元pollLast():背面の要素を除去して戻す