[Java]伯俊5430号[Ac]Java
白俊5430号です.
https://www.acmicpc.net/problem/5430
質問する
最初はDequeが空の場合は「error」を無条件に出力しますが、よく考えてみるとDequeが空の場合は「[]」を出力する必要があります.
配列が空の場合、Rに「error」は表示されません.
配列は最大100個の数値を含むことができるため、charat()を使用して配列を中断することはできません.
まず、配列形式で入力されたテストキャビネットを[,]に従ってマークし、
デフォルト値は順方向であるため、trueに初期化されます.
Rの場合、逆変換
順方向ではpollFirstと行ってnullを返すと空になりますがDを使用しているのですぐに「error」に戻ります.
逆にするとpollLastとともにnullを返すと空になりますが、Dを使用しているのですぐに「error」を返します.
「error」が表示されない場合は、ここに移動します.「error」の場合、ここに戻ることはできません.
まず「[」をsbに追加します.
『,』がくっつくかどうかを判断するために、Deque.ID isEmpty()
Dequeが空でない場合は、「,」を真ん中に置いて、前から要素を取り出し続けます.
逆方向deque.pollLast()だけが異なり、プロセスは同じです.
解が終わったら交流で呼び出します.
コード#コード#
https://www.acmicpc.net/problem/5430
質問する
善英は週末は用事がないので、新しいコミュニケーション言語を作りました.AC電源は、整数配列を演算するために作成される言語です.この言語には2つの関数R(反転)とD(破棄)がある.
関数Rは、配列内の数値の順序を反転させる関数であり、Dは、最初の数値を破棄する関数である.配列が空で、Dを使用するとエラーが発生します.
を選択します.たとえば、「AB」はAを実行し、Bを実行する関数です.たとえば、「RDD」は、アレイを反転させ、最初の2つの数字を破棄する関数です.
配列の初期値と実行する関数を指定する場合は、プログラムを作成して最終結果を取得します.
入力
第1行は、試験例の個数Tを与える.Tは最大100です.
各テストケースの最初の行には、実行する関数pが与えられる.pの長さは1以上であり、100000未満である.
次の行は、配列内の数値nを与えます.(0 ≤ n ≤ 100,000)
次の行は、[x 1,...,xn]と同じ形式の配列の整数を与えます.(1 ≤ x i ≤ 100)
試験例全体におけるpの長さの和nの合計は70万を超えない.
しゅつりょく
各テストケースについて、関数の結果を入力として所定の整数配列に出力します.エラーが発生した場合はerrorを出力します.
入力例 4
RDD
4
[1,2,3,4]
DD
1
[42]
RRD
6
[1,1,2,3,5,8]
D
0
[]
サンプル出力 [2,1]
error
[1,2,3,5,8]
error
考える
問題を理解し、Dequeの使用をすぐに確認します.
最初はインデックスとは思いもよらずArrayで実現しようとしましたが、結局タイムアウトで他の人の解答しか参考にできませんでした.
タイムアウトの原因は簡単です.前後を交互に消去し、繰り返します.
位置を変更し続け、アレイの位置を前に引っ張るなどしなければなりません.
最大100個のテストケースが10万個の数字で構成されていると思う場合は、
アレイを反転させるだけで10万回の操作が必要です.これは巨大な資源の浪費である.
この問題の要点
ここで身につけなければならないのは私が逃した部分です.
第1行は、試験例の個数Tを与える.Tは最大100です.
各テストケースの最初の行には、実行する関数pが与えられる.pの長さは1以上であり、100000未満である.
次の行は、配列内の数値nを与えます.(0 ≤ n ≤ 100,000)
次の行は、[x 1,...,xn]と同じ形式の配列の整数を与えます.(1 ≤ x i ≤ 100)
試験例全体におけるpの長さの和nの合計は70万を超えない.
しゅつりょく
各テストケースについて、関数の結果を入力として所定の整数配列に出力します.エラーが発生した場合はerrorを出力します.
入力例 4
RDD
4
[1,2,3,4]
DD
1
[42]
RRD
6
[1,1,2,3,5,8]
D
0
[]
サンプル出力 [2,1]
error
[1,2,3,5,8]
error
考える
問題を理解し、Dequeの使用をすぐに確認します.
最初はインデックスとは思いもよらずArrayで実現しようとしましたが、結局タイムアウトで他の人の解答しか参考にできませんでした.
タイムアウトの原因は簡単です.前後を交互に消去し、繰り返します.
位置を変更し続け、アレイの位置を前に引っ張るなどしなければなりません.
最大100個のテストケースが10万個の数字で構成されていると思う場合は、
アレイを反転させるだけで10万回の操作が必要です.これは巨大な資源の浪費である.
この問題の要点
ここで身につけなければならないのは私が逃した部分です.
4
RDD
4
[1,2,3,4]
DD
1
[42]
RRD
6
[1,1,2,3,5,8]
D
0
[]
サンプル出力 [2,1]
error
[1,2,3,5,8]
error
考える
問題を理解し、Dequeの使用をすぐに確認します.
最初はインデックスとは思いもよらずArrayで実現しようとしましたが、結局タイムアウトで他の人の解答しか参考にできませんでした.
タイムアウトの原因は簡単です.前後を交互に消去し、繰り返します.
位置を変更し続け、アレイの位置を前に引っ張るなどしなければなりません.
最大100個のテストケースが10万個の数字で構成されていると思う場合は、
アレイを反転させるだけで10万回の操作が必要です.これは巨大な資源の浪費である.
この問題の要点
ここで身につけなければならないのは私が逃した部分です.
[2,1]
error
[1,2,3,5,8]
error
問題を理解し、Dequeの使用をすぐに確認します.
最初はインデックスとは思いもよらずArrayで実現しようとしましたが、結局タイムアウトで他の人の解答しか参考にできませんでした.
タイムアウトの原因は簡単です.前後を交互に消去し、繰り返します.
位置を変更し続け、アレイの位置を前に引っ張るなどしなければなりません.
最大100個のテストケースが10万個の数字で構成されていると思う場合は、
アレイを反転させるだけで10万回の操作が必要です.これは巨大な資源の浪費である.
この問題の要点
ここで身につけなければならないのは私が逃した部分です.
最初はDequeが空の場合は「error」を無条件に出力しますが、よく考えてみるとDequeが空の場合は「[]」を出力する必要があります.
配列が空の場合、Rに「error」は表示されません.
配列は最大100個の数値を含むことができるため、charat()を使用して配列を中断することはできません.
アクション
まず、配列形式で入力されたテストキャビネットを[,]に従ってマークし、
deque
と番号付けします.関数はp
として保存されます. StringTokenizer st = new StringTokenizer(br.readLine(),"[],");
deque = new ArrayDeque<Integer>();
for(int i=0; i<number; i++) {
deque.add(Integer.parseInt(st.nextToken()));
}
交流関数を実行します.p
の入力値で関数を実行します.forward_direction
は、現在のアレイの順序が順方向または逆方向であることを示す.デフォルト値は順方向であるため、trueに初期化されます.
p
の値は、RとDを区別するために文字で区切られる.Rの場合、逆変換
forward_direction
. if(function == 'R') {
forward_direction = !forward_direction;
continue;
}
次に、条件をforward_direction
の値、すなわち方向に設定する.順方向ではpollFirstと行ってnullを返すと空になりますがDを使用しているのですぐに「error」に戻ります.
逆にするとpollLastとともにnullを返すと空になりますが、Dを使用しているのですぐに「error」を返します.
// 정방향일 때
if( forward_direction ) {
// 덱이 비었으면,
if(deque.pollFirst() == null) {
sb.append("error\n");
return;
}
}
// 역방향 일때 forward_direction = true
else {
if(deque.pollLast() == null) {
sb.append("error\n");
return;
}
}
その後、出力はmakePrintStringメソッドが担当する.「error」が表示されない場合は、ここに移動します.「error」の場合、ここに戻ることはできません.
まず「[」をsbに追加します.
forward_direction
がtrueの場合は順方向であるため、第1行出力後『,』がくっつくかどうかを判断するために、Deque.ID isEmpty()
Dequeが空でない場合は、「,」を真ん中に置いて、前から要素を取り出し続けます.
逆方向deque.pollLast()だけが異なり、プロセスは同じです.
if(forward_direction) {
sb.append(deque.pollFirst());
while(!deque.isEmpty()) {
sb.append(',').append(deque.pollFirst());
}
}
else {
sb.append(deque.pollLast());
while(!deque.isEmpty()) {
sb.append(',').append(deque.pollLast());
}
}
最後に「」を貼り、改行をつけて終わります.TMI
解が終わったら交流で呼び出します.
コード#コード# import java.io.*;
import java.util.*;
public class Main {
static ArrayDeque<Integer> deque;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
while(T --> 0) {
String p = br.readLine();
int number = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(),"[],");
deque = new ArrayDeque<Integer>();
for(int i=0; i<number; i++) {
deque.add(Integer.parseInt(st.nextToken()));
}
AC(p);
}
System.out.println(sb);
} // End of main
static void AC(String p) {
boolean forward_direction = true;
for(char function : p.toCharArray()) {
if(function == 'R') {
forward_direction = !forward_direction;
continue;
}
// 정방향일 때
if( forward_direction ) {
// 덱이 비었으면,
if(deque.pollFirst() == null) {
sb.append("error\n");
return;
}
}
// 역방향 일때 forward_direction = true
else {
if(deque.pollLast() == null) {
sb.append("error\n");
return;
}
}
}
makePrintString(forward_direction);
}
private static void makePrintString(boolean forward_direction) {
sb.append('[');
if(deque.size() > 0) {
if(forward_direction) {
sb.append(deque.pollFirst());
while(!deque.isEmpty()) {
sb.append(',').append(deque.pollFirst());
}
}
else {
sb.append(deque.pollLast());
while(!deque.isEmpty()) {
sb.append(',').append(deque.pollLast());
}
}
}
sb.append(']').append('\n');
} // End of makePrintString
} // End of class
Reference
この問題について([Java]伯俊5430号[Ac]Java), 我々は、より多くの情報をここで見つけました
https://velog.io/@lifeisbeautiful/Java-백준-5430번-AC-자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.io.*;
import java.util.*;
public class Main {
static ArrayDeque<Integer> deque;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
while(T --> 0) {
String p = br.readLine();
int number = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(),"[],");
deque = new ArrayDeque<Integer>();
for(int i=0; i<number; i++) {
deque.add(Integer.parseInt(st.nextToken()));
}
AC(p);
}
System.out.println(sb);
} // End of main
static void AC(String p) {
boolean forward_direction = true;
for(char function : p.toCharArray()) {
if(function == 'R') {
forward_direction = !forward_direction;
continue;
}
// 정방향일 때
if( forward_direction ) {
// 덱이 비었으면,
if(deque.pollFirst() == null) {
sb.append("error\n");
return;
}
}
// 역방향 일때 forward_direction = true
else {
if(deque.pollLast() == null) {
sb.append("error\n");
return;
}
}
}
makePrintString(forward_direction);
}
private static void makePrintString(boolean forward_direction) {
sb.append('[');
if(deque.size() > 0) {
if(forward_direction) {
sb.append(deque.pollFirst());
while(!deque.isEmpty()) {
sb.append(',').append(deque.pollFirst());
}
}
else {
sb.append(deque.pollLast());
while(!deque.isEmpty()) {
sb.append(',').append(deque.pollLast());
}
}
}
sb.append(']').append('\n');
} // End of makePrintString
} // End of class
Reference
この問題について([Java]伯俊5430号[Ac]Java), 我々は、より多くの情報をここで見つけました https://velog.io/@lifeisbeautiful/Java-백준-5430번-AC-자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol