計算問題の解き方・17/20
逆ポーランド表記(後置表記)への変換と読み戻し方
中置の式(ふだんの式)を逆ポーランド表記に直す問題、逆ポーランド表記を中置の式に戻す問題、値を代入して計算する問題、計算に使うスタックの深さを問う問題が出ます。どの形でも、演算子は直前にある 2 つのかたまりに作用する、という 1 つの決まりで解けます。
公開過去問での出題:本試験系 5 回・免除試験 10 回(観測値)
覚える式
- 中置 X 演算子 Y → 後置 X Y 演算子(X と Y もそれぞれ後置に直す)
- 後置の読み方: 被演算子は積み(push)、演算子が来たら上の 2 つを取り出して(pop)「下 演算子 上」を計算し、結果を積み直す
解き方の手順
- 中置から後置に直すときは、最後に計算する演算子(いちばん外側の演算子)を見つけ、式を「左側」「右側」「その演算子」の 3 つに分けます。
- 左側と右側にも同じ分け方を繰り返し、括弧の内側から順に後置にします。被演算子の左右の順番は入れ替えません。
- 「左側の後置」「右側の後置」「演算子」の順につなげると、式全体の後置表記になります。
- 後置から中置に戻すときや、値を代入して計算するときは、左から 1 文字ずつ読みます。被演算子は積み、演算子が来たら上の 2 つを取り出して「下 演算子 上」の形にまとめ、1 つのかたまりとして積み直します。
- 最後に 1 つだけ残れば読み終わりです。答えの候補が絞れたら、この読み方で元の式に戻るかを確かめます。
- スタックの深さを問われたときは、手順 4 で読んでいる間に積まれている個数がいちばん多くなった瞬間の数を数えます。
例題
次の式を逆ポーランド表記法で表現したものはどれか。
式: ((A+B)×(C+D)) / (A-D)(分子が (A+B)×(C+D),分母が A-D の分数)
ア AB+CD+×AD-÷
イ AB+CD+AD-×÷
ウ ABCD++×AD-÷
エ ABCD++÷AD-×
出典:基本情報技術者試験 科目A免除 修了試験 20230122 実施分 問6(解き方は当サイト作成)
解き方と答えを見る
- 式は ((A+B)×(C+D))÷(A-D) です。最後に計算するのは分数の線、つまり ÷ です。
- 左側(分子)は (A+B)×(C+D) です。最後に計算するのは × です。
- A+B → AB+、C+D → CD+ なので、分子は AB+CD+× です。
- 右側(分母)は A-D なので AD- です。順番は A が先、D が後のままにします。
- 「分子」「分母」「÷」の順につなげて AB+CD+×AD-÷ になります。
- 確かめ: A,B を積んで + → (A+B)、C,D を積んで + → (C+D)、× → (A+B)×(C+D)、A,D を積んで - → (A-D)、÷ → ((A+B)×(C+D))÷(A-D) となり、元の式に戻ります。
答え:AB+CD+×AD-÷(ア)
ひっかけ
- 演算子を後ろにまとめて並べると、組み合わせが変わってしまいます。例題のイ(AB+CD+AD-×÷)は左から読むと、× が (C+D) と (A-D) にかかり、(A+B)÷((C+D)×(A-D)) という別の式になります。演算子は、そのかたまりが完成した直後に置きます。
- 被演算子を先に全部並べると、別の式になります。例題のウ(ABCD++×AD-÷)は左から読むと、C+D、B+(C+D) の順にまとまり、その次の × で A×(B+(C+D)) になります。(A+B) と (C+D) をそれぞれ作る式ではなく、B・C・D を先にまとめてしまう式です。エも同じ並べ方で、÷ と × の位置まで入れ替わっています。
- - と ÷ は順番を入れ替えると値が変わります。取り出した 2 つのうち、先に積まれていた方(下)が左、後から積まれた方(上)が右です。AD- は A-D であって D-A ではありません。
- 選択肢をなんとなく見比べて選ぶと、似た並びにだまされます。選んだ式を左から読み、元の式に戻るかを必ず確かめます。
類題(手順を使って解く)
類題 1
後置の式を左から読み、演算子ごとに直前の 2 つのかたまりを中置に戻していく手順(手順 4・5)が試されます。
逆ポーランド表記法(後置表記法)で,“EF-G÷CD-AB+÷+”と表現される式はどれか。
出典:基本情報技術者試験 科目A免除 修了試験 20230611 実施分 問3(問題文は IPA の公開問題。答えと解説はリンク先)
類題 2
4 組の計算式と後置表記のどれが正しく対応しているかを、括弧の内側から変換して(手順 1〜3)見極める力が試されます。
次に示す計算式と逆ポーランド表記法の組合せのうち,適切なものはどれか。
| 計算式 | 逆ポーランド表記法 | |
|---|---|---|
| ア | ((a+b)*c)-d | abc*+d- |
| イ | (a+(b*c))-d | ab+c*d- |
| ウ | (a+b)*(c-d) | abc*d-+ |
| エ | a+(b*(c-d)) | abcd-*+ |
出典:平成26年度 秋期 基本情報技術者試験 午前 問4(問題文は IPA の公開問題。答えと解説はリンク先)
類題 3
後置の式をスタックで処理するとき、積まれる個数の最大を数える手順(手順 6)が試されます。
図は,逆ポーランド表記法で書かれた式 abcd+++ をスタックで処理するときのスタックの変化の一部を表している。この場合,スタックの深さは最大で 4 となる。最大のスタックの深さが最も少ない逆ポーランド表記法の式はどれか。
スタックの変化(下から上へ積む): [a, b, c, d] → [a, b, c+d] → [a, b+c+d] → [a+b+c+d]
出典:平成25年度 春期 基本情報技術者試験 午前 問6(問題文は IPA の公開問題。答えと解説はリンク先)