[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()
:背面の要素を除去して戻す
Reference
この問題について([Java]伯俊10866号), 我々は、より多くの情報をここで見つけました
https://velog.io/@yun12343/Java-백준-10866번
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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);
}
}
Reference
この問題について([Java]伯俊10866号), 我々は、より多くの情報をここで見つけました https://velog.io/@yun12343/Java-백준-10866번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol