アルゴリズムとプログラミング

基本情報技術者試験スタック・キュー」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
空のスタックに対し、文字 'P' は次の数を push する操作、文字 'o' は pop する操作(取り出すだけで値は捨てる)を表す。push する数は左から 1, 2, 3, 4, 5 の順に供給される(P が現れるたびに次の数を積む)。操作列 ops = "PPoPPPo"(左から1文字ずつ)を実行したあと、スタックの内容(底→頂上)はどれか。
○手続: run(文字型の配列: ops)
  スタック: stk          // 空で開始
  整数型: next ← 1       // 次に push する数
  整数型: i
  for (i を 1 から opsの要素数 まで 1 ずつ増やす)
    if (ops[i] が 'P')
      stk.push(next)
      next ← next + 1
    else
      stk.pop()
    endif
  endfor
{1, 3, 4}(底→頂上)
{1, 2, 3}
{1, 4, 5}(pop 対象を取り違えた並び)
{2, 3, 4}(底→頂上)
正解
{1, 3, 4}(底→頂上)

供給順 1,2,3,4,5 を P のたびに積み、o のたびに頂上を捨てる。手順を追うと 2 と 5 が捨てられ、底から 1, 3, 4 が残るため アが正しい。

?選択肢ごとの解説

ア ○供給順 1,2,3,4,5 を P のたびに積み、o のたびに頂上を捨てる。手順を追うと 2 と 5 が捨てられ、底から 1, 3, 4 が残るため アが正しい。
イ ×pop 操作を無視して push した順の先頭 3 つ 1,2,3 を残した、'o' を反映しない誤りである。
ウ ×最後に push した 5 を捨てた直後の状態を取り違え、捨てた 5 を残し中間の 3 を落とした誤りである。
エ ×最初の 1 を捨てたと誤認して底を 2 にずらした、pop 対象(頂上)を取り違えた誤りである。

くわしく

push/pop 混在系列では『P で供給順の次値を積む』『o で頂上を捨てる』を厳密に時系列で追う必要がある。捨てられるのは常に直近に積まれた頂上であり、底の要素は早く積まれたものが残る。

本番での押さえどころ

試験のコツ

next の値と stk の中身を 2 列で並べ、P と o を 1 文字ずつ反映して頂上を追う。

覚え方

『P で積む数は供給順、o で消すのは頂上』と 2 点を固定する。

よくある誤り

pop が底から取り出すと誤解し、最初に積んだ値を捨ててしまうミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0104

【基本情報技術者試験】スタック・キューの問題 — 解答・解説|ukamiru 過去問