第62回【JavaScript】queue (9) 係

現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 62 回目です。

朝起きると、ルナちゃんがお腹の上で、レオくんが股の間で寝ていました。暑くて苦しくて幸せです。ルナちゃんは片手に納まるくらい小さい頃から、LeoSaki(旦那)のお腹の上で寝るのが好きで、18 年経った今でも、お腹の上で寝たがります。

それでは、今日も頑張ってみようと思います。

queue (9) 係 (paizaランク C 相当)

データ構造の queue と同様の働きをするロボットがあります。ロボットは指示に応じて配列 A に対して 2 種類の仕事を行います、仕事の内容は以下の通りです。

in n と指示された場合、A の末尾に n を追加してください。
out と指示された場合、A の先頭の要素を削除してください。ただし、A が既に空の場合、何も行わないでください。

ロボットに与えられる指示の回数 N と、各指示の内容 S_i が与えられるので、ロボットが全ての処理を順に行った後の A の各要素を出力してください。
なお、初め配列 A は空であるものとします。


入力される値

N
S_1
...
S_N

・1 行目では、ロボットに与えられる指示の回数 N が与えられます。
・続く N 行では、先頭から順に指示が与えられます。
・S_i は in n (n は整数) または out です。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

A_1
...
A_i

ロボットが全ての指示をこなした後の A の要素を先頭から改行区切りで出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ N ≦ 100
・-100 ≦ n ≦ 100 (1 ≦ i ≦ N)


入力例

10
out
in 33
out
out
out
out
in -76
out
out
in -53

出力例

-53

push と shift を利用すればいいのだろうか。この辺、模範解答がないから手探りです。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const N = Number(lines[0]);
  const A = [];
  for (let i = 1; i <= N; i++) {
      s = lines[i].split(/\s/);
      if (s[0] == 'in') {
          A.push(Number(s[1]));
      } else if (s[0] == 'out') {
          A.shift();
      }
  }
  for (let i = 0; i < A.length; i++) {
      console.log(A[i]);
  }
});
Python
import queue
N = int(input())
q = queue.Queue()
for _ in range(N):
    s = input().split()
    if s[0] == 'in':
        q.put(int(s[1]))
    elif s[0] == 'out' and q.qsize() > 0:
        q.get()
while not q.empty():
    print(q.get())

最後に

JavaScript での queue のイメージがまだつかめません。shift を実行した際に、配列が空であった場合は、undefined を返すそうです。どういうことだろう。

しかし、調べていくと、shift は遅い、という記事ばかりが目につきます。大きいデータになるなら、利用は避けた方が無難なんでしょうか。

引き続き、よろしくお願いいたします!

Python の第62回はこちら