対象試験と出題頻度
逆ポーランド記法(後置記法)は、基本情報技術者・応用情報技術者で出題されるテーマです。
中置記法の数式を後置記法に変換する問題や、後置記法で表された式の演算結果を求める問題が定番化しており、スタックを使った計算手順を正しく理解しているかが問われます。
FE H24春 午前問4、FE H26秋 午前問4、AP R5秋 午前問3など、複数の試験回で繰り返し出題されています。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
情報処理試験を勉強していると、「逆ポーランド記法って何?普通の計算式と何が違うの?」と混乱しがちです。
逆ポーランド記法(Reverse Polish Notation:RPN)とは、一言で言うと
「演算子(+や×など)を、2つの被演算子の後ろに書く数式の表記法」
のことです。
イメージとしては、「食券の自販機方式」です。
通常の数式(中置記法)が「レジでメニューを伝えてから支払う」だとすれば、逆ポーランド記法は「先に食材(数値)を全部並べてから、最後に調理指示(演算子)を出す」イメージです。
括弧が不要になり、コンピュータが処理しやすい形式になります。
📊 逆ポーランド記法の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Reverse Polish Notation(RPN) |
| 別名 | 後置記法(後置表記法) |
| 最大の特徴 | 括弧が不要で、スタックだけで機械的に計算できる |
| 対になる概念 | 中置記法(普通の数式)、ポーランド記法(前置記法) |
解説
私たちが普段使っている数式の書き方は「中置記法」と呼ばれ、演算子を被演算子の間に置きます(例:A+B)。
人間には読みやすいのですが、コンピュータにとっては「括弧の優先順位」や「乗除算が先」というルールを処理するのが面倒です。
この問題を解決するために考案されたのが、演算子を後ろに置く後置記法です。ポーランドの論理学者ヤン・ウカシェヴィチが考案した前置記法(ポーランド記法)を逆順にしたため「逆ポーランド記法」と名付けられました。
3つの記法の比較
同じ計算「AとBを足す」を3つの記法で書くと、以下のように位置関係が変わります。
| 記法名 | 表記例 | 演算子の位置 |
|---|---|---|
| 前置記法(ポーランド記法) | + A B | 被演算子の前 |
| 中置記法(通常の数式) | A + B | 被演算子の間 |
| 後置記法(逆ポーランド記法) | A B + | 被演算子の後ろ |
中置記法から逆ポーランド記法への変換手順
変換は「普通に計算する順番」で行います。
括弧の中 → 乗除算 → 加減算の優先順位で、対象の演算子を2つの被演算子の右に移動させるだけです。一度変換した部分はひとまとまりの項として扱います。
▼ 変換例:(A+B)×C を逆ポーランド記法にする
Step1 括弧内の A+B を変換 → AB+ × C
Step2 AB+ と C の × を変換 → AB+C×
※ 変換済みの「AB+」を1つの項とみなして、Cとの×演算を変換するのがコツです。
▶ もう少し複雑な変換例を見る(クリックで展開)
例:Y=(A+B)×(C-(D÷E)) を変換
Step1 括弧内の A+B → AB+、D÷E → DE÷
Step2 C-(DE÷) → CDE÷-
Step3 (AB+)×(CDE÷-) → AB+CDE÷-×
Step4 Y=(AB+CDE÷-×) → YAB+CDE÷-×=
FE H24春 午前問4で出題された式そのものです。実際に手を動かして変換してみてください。
スタックを使った計算手順
逆ポーランド記法の式は、スタック(後入れ先出しのデータ構造)を使って機械的に計算できます。ルールは2つだけです。
(1)数値が来たらスタックに積む(push)。(2)演算子が来たらスタックから上の2つを取り出し(pop)、演算結果を積み直す。
▼ 計算例:ABCD-×+(A=16, B=8, C=4, D=2)
| 手順 | 読む文字 | 操作 | スタックの状態(←top) |
|---|---|---|---|
| 1 | A(16) | pushする | [ 16 ] |
| 2 | B(8) | pushする | [ 16, 8 ] |
| 3 | C(4) | pushする | [ 16, 8, 4 ] |
| 4 | D(2) | pushする | [ 16, 8, 4, 2 ] |
| 5 | - | 4と2をpop → 4-2=2をpush | [ 16, 8, 2 ] |
| 6 | × | 8と2をpop → 8×2=16をpush | [ 16, 16 ] |
| 7 | + | 16と16をpop → 16+16=32をpush | [ 32 ] |
→ 演算結果:32(AP R5秋 午前問3の正解)
ここだけは確実に押さえてください。
演算子が来たとき「先にpopした値が右側、後にpopした値が左側」になります。引き算や割り算では順番を間違えると答えが変わるので注意が必要です。
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 逆ポーランド記法の核心を3行で
・演算子を被演算子の後ろに書く表記法で、括弧が不要になる
・変換は「普通に計算する順番」で演算子を右に移動させるだけ
・スタックを使い「数値→push、演算子→2つpopして演算→push」で機械的に計算できる
試験ではこう出る!
逆ポーランド記法は、基本情報技術者・応用情報技術者の午前問題で繰り返し出題されています。
出題パターンは大きく2つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| AP R5秋 午前 問3 |
ABCD-×+ にA=16,B=8,C=4,D=2を代入し演算結果を求める問題。 | ・スタックによる計算手順を正しくたどれるか ・引き算のpop順序を間違えないか |
| FE H26秋 午前 問4 |
計算式と逆ポーランド表記法の正しい組合せを選ぶ問題。 | ・中置記法 → 後置記法の変換を4パターンで比較 ・演算の優先順位に沿った変換ができるか |
| FE H24春 午前 問4 |
Y=(A+B)×(C-(D÷E))を後置記法で表現したものを選ぶ問題。 | ・括弧が入れ子になった式の変換 ・変換済み部分を1つの項とみなす操作 |
| AP H23秋 午前 問2 |
A+B×Cの逆ポーランド表記法を選ぶ問題。 | ・乗算優先(B×C → BC×を先に変換)を理解しているか ・R2秋AP問3、R6秋AP問3でも同一問題が出題(流用問題) |
📝 IPA試験での出題パターン
パターン1:「中置記法の式を逆ポーランド記法に変換せよ」
通常の数式が与えられ、4つの後置記法の候補から正しいものを選ぶ形式。ひっかけは演算の優先順位を無視した変換結果。「括弧の中→乗除算→加減算」の順で変換すれば正答できる。
パターン2:「逆ポーランド記法の式に値を代入して計算せよ」
後置記法の式と各変数の値が与えられ、演算結果を求める形式。スタック操作を1つずつ追えば確実に解ける。引き算・割り算でのpop順序がひっかけポイント。
試験ではここまででOKです。コンパイラの構文解析における逆ポーランド記法の活用など、理論面を深掘りする出題はないので深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. 式 A+B×C を逆ポーランド記法(後置記法)で表現したものとして、最も適切なものはどれでしょうか?
- A. AB+C×
- B. ABC×+
- C. +A×BC
正解と解説を見る
正解:B
解説:
中置記法 A+B×C では、乗算(B×C)が加算より優先されます。まず B×C を変換して BC× とし、次に A+(BC×) を変換して ABC×+ とするのが正しい手順です。
選択肢Aの AB+C× は (A+B)×C の変換結果であり、演算の優先順位を無視して左から順に変換してしまった誤りです。選択肢Cの +A×BC は演算子が被演算子の前に置かれており、前置記法(ポーランド記法)の表現です。後置記法ではありません。
よくある質問(FAQ)
Q. 逆ポーランド記法は実務のどこで使われていますか?
コンパイラが数式を機械語に変換する際の中間表現として使われています。ソースコードの数式を構文解析し、一度逆ポーランド記法に変換してからスタックマシン向けのコードを生成する流れが代表的です。また、HP社の関数電卓やPostScript(PDFの基盤技術)も逆ポーランド記法を採用しています。
Q. 「ポーランド記法」と「逆ポーランド記法」の違いは何ですか?
ポーランド記法(前置記法)は演算子を被演算子の前に書く方式です(例:+ A B)。逆ポーランド記法(後置記法)は後ろに書く方式です(例:A B +)。IPA試験ではほぼ逆ポーランド記法のみが出題されるため、ポーランド記法を深く覚える必要はありません。前置記法はLISP系のプログラミング言語で採用されています。
Q. 引き算や割り算でpopの順番を間違えたらどうなりますか?
答えが変わります。スタックから先にpopした値が「右側の被演算子」、後にpopした値が「左側の被演算子」になります。たとえば式 AB- でA=10, B=3の場合、先にpopされるB(3)が右側、後にpopされるA(10)が左側なので 10-3=7 が正解です。逆にすると 3-10=-7 となり不正解になります。足し算・掛け算は交換法則が成り立つので順番が入れ替わっても結果は同じですが、引き算・割り算では致命的なミスになります。
Q. 逆ポーランド記法とBNF記法は関係がありますか?
直接の関係はありませんが、応用情報技術者試験の午後問題ではBNF(バッカス・ナウア記法)で数式の文法規則を定義し、その文法に従って逆ポーランド記法への変換を行わせる複合問題が出題されたことがあります。BNFは「文法の定義方法」、逆ポーランド記法は「数式の表現方法」であり、役割が異なる概念です。