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

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

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
次の擬似言語は、逆ポーランド記法(後置記法)の式をスタックで評価する手続である。トークン列を左から処理し、数値なら 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 つ取り出して計算して積み直す』と覚える。

よくある誤り

中置記法の演算子優先順位を持ち込んで評価したり、減算でオペランドの左右を逆にしたりするミスがある。

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

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

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

無料ではじめる →

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

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