白駿15828ルータ


https://www.acmicpc.net/problem/15828



トラブルシューティング


入力ルータの順にバッファに追加・削除することで、キューデータ構造を使用するべきだと思います.バッファにスペースがない場合は、入力は無視されます.これは、キューがいっぱいになったときに追加されないのと同じです.入力値0はパケット処理、−1は終了条件、その他の正の値はパケット処理を示す.
  • 入力NはQのサイズです.
  • 入力
  • -1で終了->(while sc.nextInt() != -1)
  • 入力値が0の場合、キューから削除/else入力値が正の値で、現在のキューのサイズが入力Nより小さい場合、キューに追加される
  • サイクルが完了すると、キューが空の場合、出力が空/そうでない場合、出力キューの値は
  • となる.

    ソースコード

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    
    public class b15828 {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine()); // queue size
            Queue<Integer> q = new LinkedList<>();
            int check = 0; // 종료조건
            while (check != -1) {
                check = Integer.parseInt(br.readLine());
                if (check == 0) {
                    q.poll();
                } else if (check > 0 && q.size() < n) {
                    q.offer(check);
                }
            }
            if (q.isEmpty()) {
                System.out.println("empty");
            } else {
                while (!q.isEmpty()) {
                    System.out.print(q.poll() + " ");
                }
            }
        }
    }

    足りないところ

  • 終了条件ですが、入力する値の変数checkとは思いませんでした
  • 現在のキューがいっぱいで、入力できない部分
  • を実現できません.
  • スキャナー入力時、1616 ms/BufferedReader入力時、1076 ms
  • 入力