メインコンテンツへ
アルゴリズムとプログラミング

空のスタックに対して次の順序で操作を行った。push(1), push(2), pop, push(3), push(4), pop, push(5), pop, pop。すべての操作後、スタックに残っている要素を底から順に並べたものはどれか。

ア.1, 3, 5
イ.1, 2, 3
ウ.1, 5
エ.1正解

解説

スタックは「お皿の積み重ね」。pushは上に乗せる、popは一番上を取る——LIFO(後入れ先出し)。1ステップずつ紙に書くのが最強の解法。頭の中で巻き戻すと必ず事故ります。

なぜ エ が正解か

エが正解。1操作ずつトレース(底→上の順で表記):①push(1) → [1]、②push(2) → [1,2]、③pop(2が出る)→ [1]、④push(3) → [1,3]、⑤push(4) → [1,3,4]、⑥pop(4が出る)→ [1,3]、⑦push(5) → [1,3,5]、⑧pop(5が出る)→ [1,3]、⑨pop(3が出る)→ [1]。最終的にスタックには1だけが残る。

なぜ ア は間違いか

1, 3, 5 はステップ⑦の途中状態。最後の2回のpopを実行し忘れた中間結果。「すべての操作後」という設問条件を見落とさない。

なぜ イ は間違いか

1, 2, 3 はpush(1),push(2),push(3)まで進めた時点の中間状態と一致するが、そこで止める自然な単一ミスは見当たらない(pushだけ集計すると1,2,3,4,5になる)。

なぜ ウ は間違いか

1, 5 を導く自然な単一ミスは見当たらない(pop⑨のみを忘れると1,3になる)。トレース表を最後まで完走することが肝心。

出典: AI生成問題(学習用)

この分野の解説記事

科目Bの歩き方 — 擬似言語は「3つの型」で読む