今回は paiza の「2 つのキュー」の問題に挑戦!
🟦 問題概要
🔹 テーマ
- 2つのキューを同時に管理する
- クエリに応じてそれぞれ操作
🔹 やること
- キューを2つ用意する
-
Q個のクエリを順に処理 - クエリの種類によって処理・出力を変える
🔹 クエリの種類
① 1 K X(PUSH)
-
K番目のキューにXを追加 - 出力なし
② 2 K(POP)
-
K番目のキューの先頭を削除 - 削除する前に、キューの先頭の値を出力
③ 3(SIZE)
- 1番目と2番目のキューの要素数を出力
-
S1 S2の形式
入力例:
6
1 1 2
1 2 3
1 1 4
3
2 1
3
出力例:
2 1
2
1 1
✅OK例:
const rl = require('readline').createInterface({ input: process.stdin });
const lines = [];
rl.on('line', line => lines.push(line));
rl.on('close', () => {
const Q = Number(lines[0]);
const query = lines.slice(1).map(q => q.split(' ').map(Number));
const queue = Array.from({ length: 2 }, () => []);
for (let i = 0; i < Q; i++) {
const [num, k, x] = query[i];
if (num === 1) {
queue[k-1].push(x);
}
else if (num === 2) {
console.log(queue[k-1][0]);
queue[k-1].shift();
}
else {
console.log(queue[0].length, queue[1].length);
}
}
});
🟦 コードの流れ
- 入力を受け取る
-
Qを取得 - クエリを数値配列に変換
- キューを 2 つ作る
-
Q回ループ-
num === 1→push -
num === 2→ 先頭を出力してshift -
num === 3→ それぞれのlengthを出力
-
📝まとめ
queue1 = [], queue2 = [] と書いてもいいが、 queue = [ [], [] ] と二次元配列でキューを管理。
あとは、前回同様にFIFOを実装するのと、新しいSIZEについては.lengthで配列の長さを出力するだけ。