0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

スタック実装編 step 1

0
Posted at

今回は paiza の「スタック実装編 step 1」の問題に挑戦!


問題概要

■ テーマ

  • スタック(Stack)
  • 構造:先入れ後出し(LIFO: Last In, First Out)

■ やること

  • 空の配列 A を用意する
  • Q 個のクエリを順番に処理する
  • 各クエリ処理後に、配列 A の中身を出力する

■ クエリの種類

  • 1 X
    • PUSH 操作
    • 配列 A の末尾に X を追加
  • 2
    • POP 操作
    • 配列 A の末尾の要素を削除

■ 入力形式

Q
query_1
query_2
...
query_Q
  • Q:クエリの数(1以上100未満)
  • 各クエリは
    • 1 X(PUSH)
    • 2(POP)

※ POP が来るときは必ず要素がある(空配列にはならない)

■ 出力形式

  • 各クエリ処理後の配列 A を出力
  • 半角スペース区切り
  • 各行の末尾に改行
  • 余計な空行や文字は出さない


入力例:

4
1 4
1 5
1 3
2

出力例:

4
4 5
4 5 3
4 5






✅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 arrA = [];
    
    for (let i = 0; i < Q; i++) {
        const [num, x] = query[i];
        
        if (num === 1) {
            arrA.push(x);
        } else {
            arrA.pop();
        }
        
        console.log(arrA.join(' '));
    }
});

🔍コードの流れ

readlineで標準入力を受け取る準備をする
・入力された各行を line 配列に保存していく
・入力が終わったら close イベントが実行される

・1行目を数値に変換して Q(クエリ数)を取得
・2行目以降を「数値の配列」に変換して query に格納

・空の配列 arrA を用意(スタックとして使う)

Q回ループする
 ・query[i] を分割代入で numx に取り出す
 ・num1 なら
  → arrA.push(x)(末尾に追加)
 ・それ以外(2)なら
  → arrA.pop()(末尾を削除)
 ・処理後の arrAjoin(' ') でスペース区切りにして出力






📝まとめ

■ スタックの理解

  • LIFO(最後に入れたものが最初に出る)
  • 追加・削除は「末尾」だけ
  • イメージは「積み上げられた本」

■ 配列でスタックを実装できる

  • push() → 追加
  • pop() → 削除
  • join(' ') → 出力整形
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?