基本情報技術者試験「スタック・キュー」の問題
次の擬似言語は、逆ポーランド記法(後置記法)の式をスタックで評価する手続である。トークン列を左から処理し、数値なら push、演算子なら上位 2 値を pop して計算結果を push する。減算・除算は先に pop した値を右側オペランドとする。トークン列 {"5", "3", "+", "4", "*"} を与えて実行したとき、戻り値はどれか。
○整数型: evalRPN(トークンの配列: t)
for (各トークン tok を t から取り出す)
if (tok が数値)
push(tok を整数に変換)
else
整数型: b ← pop()
整数型: a ← pop()
push(a tok b の計算結果)
endif
endfor
return pop()ア27
イ23
ウ32
エ320
正解
ウ.32
5,3 を push し '+' で 5+3=8 を push、4 を push し '*' で 8×4=32 を push する。最後に pop した 32 が返るため ウが正しい。式に直すと (5+3)×4=32 である。
?選択肢ごとの解説
ア ×加算と乗算の順序を取り違え 5+3×... のように中置記法的に解釈した結果に近い誤りである。
イ ×演算子の適用順を誤り (5+3)×4 ではなく 5+3×4 を中置として評価しようとした誤りである。
ウ ○5,3 を push し '+' で 5+3=8 を push、4 を push し '*' で 8×4=32 を push する。最後に pop した 32 が返るため ウが正しい。式に直すと (5+3)×4=32 である。
エ ×正解 32 の桁を取り違え 10 倍した 320 とする桁の誤りである。
✎くわしく
逆ポーランド記法はスタックで評価でき、演算子に出会うたびに直近 2 値を取り出す。先に pop した値が右オペランドになる点が減算・除算で重要である。
✓本番での押さえどころ
試験のコツ
スタックの中身を 1 トークンごとに書き、演算子で上位 2 値を取り出して結果を戻す動作を丁寧に追う。
覚え方
『数字は積む、記号は 2 つ取り出して計算して積み直す』と覚える。
よくある誤り
中置記法の演算子優先順位を持ち込んで評価したり、減算でオペランドの左右を逆にしたりするミスがある。
アルゴリズムとプログラミングの他の問題
次の擬似言語で表される手続 sumOdd を、引数として要素数 5 の整数型の配列 {12, 125, 1008,…次の擬似言語は、整数型の配列 arr に対して隣接交換を行う手続の一部であり、外側ループの 1 回目(1…次の擬似言語は昇順に整列された配列 arr に対する二分探索の手続である。arr = {2, 4, 6, 8, 10,…次の擬似言語で表される再帰手続 f を、引数 n = 20 で呼び出したとき、戻り値として返される値はどれか。
```…単方向連結リストの各ノードはメンバ val(整数)と next(次ノードへの参照。なければ NULL)をもつ。先頭ノード…スタックに対する push(積む)と…
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0029