[Java]伯俊10866号[DEX]Java


白駿10866号
https://www.acmicpc.net/problem/10866

質問する


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


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

    しゅつりょく


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

    入力例

    15
    push_back 1
    push_front 2
    front
    back
    size
    empty
    pop_front
    pop_back
    pop_front
    size
    empty
    pop_back
    push_front 3
    empty
    front

    サンプル出力

    2
    1
    2
    0
    2
    1
    -1
    0
    1
    -1
    0
    3

    考える


    典型的なDuqueデータ構造とLinkedListのデータ構造を理解する.
    一つ一つの命令で解けばいい
    削除出力の挿入などのデフォルト機能を使用できます.

    TMI


    Pass

    コード#コード#

    import java.io.*;
    import java.util.*;
    
    public class Main {
    	static LinkedList<Integer> deque = new LinkedList<>();
    	static StringBuilder sb = new StringBuilder();
    
    	public static void main(String[] args) throws Exception {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st;
    
    		int N = Integer.parseInt(br.readLine());
    		String function = "";
    		int num = 0;
    
    		while(N --> 0) {
    			st = new StringTokenizer(br.readLine());
    
    			if(st.countTokens() > 1) {
    				function = st.nextToken();
    				num = Integer.parseInt(st.nextToken());
    
    				if(function.startsWith("push_f")) {
    					push_front(num);
    				}
    				else if(function.startsWith("push_b")){
    					push_back(num);
    				}
    			}
    			else {
    				function = st.nextToken();
    
    				if(function.startsWith("f")) {
    					front();
    				}
    				else if(function.startsWith("b")) {
    					back();
    				}
    				else if(function.startsWith("s")) {
    					size();
    				}
    				else if(function.startsWith("e")) {
    					empty();
    				}
    				else if(function.startsWith("pop_f")) {
    					pop_front();
    				}
    				else if(function.startsWith("pop_b")) {
    					pop_back();
    				}
    
    			}
    		}
    
    		System.out.println(sb);
    	} // End of main
    
    	static void push_front(int num) {
    		deque.offerFirst(num);
    	}
    
    	static void push_back(int num) {
    		deque.offerLast(num);
    	}
    
    	static void size() {
    		sb.append(deque.size()).append('\n');
    	}
    
    	static void front() {
    		if(deque.isEmpty()) {
    			sb.append(-1).append('\n');
    		}
    		else {
    			sb.append(deque.peekFirst()).append('\n');
    		}
    	}
    
    	static void back() {
    		if(deque.isEmpty()) {
    			sb.append(-1).append('\n');
    		}
    		else {
    			sb.append(deque.peekLast()).append('\n');
    		}
    	}
    
    	static void pop_front() {
    		if(deque.isEmpty()) {
    			sb.append(-1).append('\n');
    		}
    		else {
    			sb.append(deque.removeFirst()).append('\n');
    		}
    	}
    
    	static void pop_back() {
    		if(deque.isEmpty()) {
    			sb.append(-1).append('\n');
    		}
    		else {
    			sb.append(deque.removeLast()).append('\n');
    		}
    	}
    
    	static void empty() {
    
    		if(deque.isEmpty()) {
    			sb.append(1).append('\n');
    		}
    		else {
    			sb.append(0).append('\n');
    		}
    
    	}
    
    } // End of class