[Baekjoon]10845号(SILVER IV):Q(Java)
1. Problem 📃
[Q]
https://www.acmicpc.net/problem/10845
[質問]
整数を格納するキューを実装し、入力としてのコマンドを処理するプログラムを作成してください.
命令は全部で6条ある. push X:整数Xをキューに入れる演算. pop:キューの一番前の整数を除いて、その数値を出力します.キューに整数がない場合は、-1が出力されます. size:出力キューの整数の個数. NULL:キューがNULLの場合、1または0が出力されます. front:出力キューの一番前の整数.キューに整数がない場合は、-1が出力されます. back:出力キューの一番後ろの整数.キューに整数がない場合は、-1が出力されます. 2. Input ⌨️
[入力]
1行目に与えられるコマンド数N(1≦N≦10000).
2行目からN行目までそれぞれ1つのコマンドがあります.
与えられた整数は1以上であり、100000以下である.
問題にない命令はない.
3. Output 🖨
[出力]
出力するコマンドが発行されるたびに、各行に1つのコマンドが出力されます.
4. Example 📚
[IO例]
例入力例出力15 push 1 push 2 f r o n t b a c k s i z e m p u t o psizeemputopsizeempumputopush 3 emptyfront 1222012-101-103
5. Solution 🔑
問題のpush popsize、empty、front、backは、実装方法によって問題を解決します.
1.staticを使用してキューを表す配列変数(queue)をコマンドの最大数10000とするので、10000個の値を入力することもできます.したがって、サイズは10000と宣言されます.
寸法を表す変数(size)とpoll()のため、一番前の値が欠けている場合は、一番前の変数(front)と一番後ろの変数(back)を0に初期化して宣言します.
pushは、キューに値を入れるコマンドです.
配列変数queueのbackに値を入れます.(sizeはポーリング時に失われる可能性があるため)
sizeが増加したため、sizeは++(増加)増加し、back値も+(増加)増加した.
3.popは一番前の値を消して出力するコマンドです.
キューが空(size==0)の場合、-1が返されます.
そうでなければ、一番前を表すqueue[front]値を変数(n)に含め、値を減算するのでsizeを--(減算)、frontも1つのセルの後ろに移動するので、front値を+(増加)に設定します.そして中に入っているnを返します.
4.sizeは出力キュー長のコマンドです.
size値を返します.
5.NULLは、キューに値の有無を出力するコマンドです.
アレイキューが空の場合(size==0)、1値を返します.そうでない場合、0値を返します.
6.frontは、最前面値を出力するコマンドです.
配列が空の場合は-1を返し、そうでない場合は配列変数queueのfrontインデックスを返します.
7.backは最後尾値を出力するコマンドです.
配列が空の場合は-1を返します.そうでない場合は、配列変数queueのback-1インデックスを返します.
8.マスターメソッドで何回コマンドを受信したかを入力する変数(N).
9.戻り値がある場合、コマンドを受信するたびに、スイッチ文で入力した値に一致するコードが実行されます.
StringBuilder(sb)に装着して行を開きます.
10.最終出力StringBuilder(sb).
6. Code 💻
[Q]
https://www.acmicpc.net/problem/10845
[質問]
整数を格納するキューを実装し、入力としてのコマンドを処理するプログラムを作成してください.
命令は全部で6条ある.
[入力]
1行目に与えられるコマンド数N(1≦N≦10000).
2行目からN行目までそれぞれ1つのコマンドがあります.
与えられた整数は1以上であり、100000以下である.
問題にない命令はない.
3. Output 🖨
[出力]
出力するコマンドが発行されるたびに、各行に1つのコマンドが出力されます.
4. Example 📚
[IO例]
例入力例出力15 push 1 push 2 f r o n t b a c k s i z e m p u t o psizeemputopsizeempumputopush 3 emptyfront 1222012-101-103
5. Solution 🔑
問題のpush popsize、empty、front、backは、実装方法によって問題を解決します.
1.staticを使用してキューを表す配列変数(queue)をコマンドの最大数10000とするので、10000個の値を入力することもできます.したがって、サイズは10000と宣言されます.
寸法を表す変数(size)とpoll()のため、一番前の値が欠けている場合は、一番前の変数(front)と一番後ろの変数(back)を0に初期化して宣言します.
pushは、キューに値を入れるコマンドです.
配列変数queueのbackに値を入れます.(sizeはポーリング時に失われる可能性があるため)
sizeが増加したため、sizeは++(増加)増加し、back値も+(増加)増加した.
3.popは一番前の値を消して出力するコマンドです.
キューが空(size==0)の場合、-1が返されます.
そうでなければ、一番前を表すqueue[front]値を変数(n)に含め、値を減算するのでsizeを--(減算)、frontも1つのセルの後ろに移動するので、front値を+(増加)に設定します.そして中に入っているnを返します.
4.sizeは出力キュー長のコマンドです.
size値を返します.
5.NULLは、キューに値の有無を出力するコマンドです.
アレイキューが空の場合(size==0)、1値を返します.そうでない場合、0値を返します.
6.frontは、最前面値を出力するコマンドです.
配列が空の場合は-1を返し、そうでない場合は配列変数queueのfrontインデックスを返します.
7.backは最後尾値を出力するコマンドです.
配列が空の場合は-1を返します.そうでない場合は、配列変数queueのback-1インデックスを返します.
8.マスターメソッドで何回コマンドを受信したかを入力する変数(N).
9.戻り値がある場合、コマンドを受信するたびに、スイッチ文で入力した値に一致するコードが実行されます.
StringBuilder(sb)に装着して行を開きます.
10.最終出力StringBuilder(sb).
6. Code 💻
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[] queue = new int[10000];
static int size = 0;
static int front = 0;
static int back = 0;
// push X: 정수 X를 큐에 넣는 연산이다.
public static void push (int val) {
queue[back] = val;
size++;
back++;
}
// pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
public static int pop() {
if(size == 0) {
return -1;
}
else {
int n = queue[front];
size--;
front++;
return n;
}
}
// size: 큐에 들어있는 정수의 개수를 출력한다.
public static int size() {
return size ;
}
// empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
public static int empty() {
if(size == 0) {
return 1;
}
else {
return 0;
}
}
// front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
public static int front() {
if(size == 0) {
return -1;
}
else {
return queue[front];
}
}
// back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
public static int back() {
if(size == 0) {
return -1;
}
else {
return queue[back - 1];
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(st.nextToken());
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine(), " ");
switch(st.nextToken()) {
case "push" :
push(Integer.parseInt(st.nextToken()));
break;
case "pop" :
sb.append(pop()).append("\n");
break;
case "size" :
sb.append(size()).append("\n");
break;
case "empty" :
sb.append(empty()).append("\n");
break;
case "front" :
sb.append(front()).append("\n");
break;
case "back" :
sb.append(back()).append("\n");
break;
}
}
System.out.println(sb);
}
}
Reference
この問題について([Baekjoon]10845号(SILVER IV):Q(Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@tpdlqj0514/Baekjoon-10845번-SILVER-IV-큐-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol