第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 は遅い、という記事ばかりが目につきます。大きいデータになるなら、利用は避けた方が無難なんでしょうか。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません