最終更新日:2026年8月28日
fe fe-technology algorithm
まず結論
逆ポーランド表記法とは、演算子を、計算する対象の後ろに置く表記法です。
基本情報技術者試験では、次の2つの読み方を使い分けます。
普通の式へ戻す
→ 「値・値・演算子」を1つの式にまとめる
スタックで処理する
→ 値はpush
→ 演算子は2個popして計算し、結果をpush
例えば、
A + B
→ AB+
です。
最大スタック深さを問われた場合は、処理中に同時に積まれている値の最大個数を数えます。
直感的な説明
普通の式では、演算子は値の間にあります。
A + B
逆ポーランド表記法では、演算子を後ろに置きます。
A B +
つまり、
値 値 演算子
→ その2つの値を計算する
と読みます。
例えば、AB+ は (A+B)、AB- は (A-B) です。
逆ポーランド表記では計算順序が式の並びに含まれるため、括弧や演算子の優先順位を使わずに式を評価できます。
さらに、スタックを使うと処理を機械的に追えます。
値が来た
→ 積む
演算子が来た
→ 上から2個取り出して計算
→ 結果を積む
スタックのLIFOやpush・popを先に復習したい場合は、スタックとは?を確認すると理解しやすくなります。
定義・仕組み
逆ポーランド表記法は、演算子を被演算子の後ろに書く表記法で、後置表記法(postfix notation)とも呼ばれます。
| 表記 | 例 | 意味 |
|---|---|---|
| 中置表記 | A+B | 普通の式。演算子が間にある |
| 後置表記 | AB+ | 逆ポーランド表記法。演算子が後ろにある |
| 前置表記 | +AB | ポーランド表記法。演算子が前にある |
普通の式へ戻す
例えば、
XY-Z*
を考えます。
まず、XY- を1つにまとめます。
XY-
→ (X-Y)
残りは、
(X-Y) Z *
なので、
(X-Y) * Z
となります。
スタックで計算する
逆ポーランド表記をスタックで処理するときの基本ルールは次のとおりです。
| 読んだもの | 処理 |
|---|---|
| 値・変数 | スタックへpush |
| 演算子 | 上から2個popして演算し、結果をpush |
例えば、
ab+c+
なら、
| 記号 | 処理後のスタック |
|---|---|
| a | [a] |
| b | [a, b] |
| + | [a+b] |
| c | [a+b, c] |
| + | [a+b+c] |
となります。
演算子を1個処理すると、
2個pop
↓
計算
↓
結果を1個push
なので、スタックの深さは結果として1減ります。
減算・除算は順番に注意
加算や乗算では順序を入れ替えても結果は同じですが、減算や除算では違います。
AB-
→ A-B
AB÷
→ A÷B
スタックでは、先にpopした値が右側、次にpopした値が左側になります。
公式の出題範囲やシラバスは、IPA:基本情報技術者試験から確認できます。
科目Aでどう出る?
科目Aでは、主に次のような形で出題されます。
- 逆ポーランド表記を普通の式に戻す
- 普通の式を逆ポーランド表記にする
- スタックの途中状態を求める
- 必要な最大スタック深さを求める
最大スタック深さとは
最大スタック深さは、処理途中でスタックへ同時に積まれた値の最大個数です。
例えば、
abcd+++
を処理すると、最初に4つの値をすべて積みます。
a → [a] 深さ1
b → [a, b] 深さ2
c → [a, b, c] 深さ3
d → [a, b, c, d] 深さ4
+ → [a, b, c+d] 深さ3
+ → [a, b+c+d] 深さ2
+ → [a+b+c+d] 深さ1
したがって、最大深さは4です。
一方、
ab+c+d+
なら、値を2個積むたびに途中計算できます。
a → [a] 深さ1
b → [a, b] 深さ2
+ → [a+b] 深さ1
c → [a+b, c] 深さ2
+ → [a+b+c] 深さ1
d → [a+b+c, d] 深さ2
+ → [a+b+c+d] 深さ1
最大深さは2です。
どちらも加算だけなら最終結果は同じですが、必要なスタックの深さは異なります。
最大深さを小さくする判断基準
試験では、次の傾向が使えます。
値を先にたくさん並べる
→ スタックが深くなりやすい
演算子を早めに処理する
→ 途中結果を1個にまとめられる
→ スタックが浅くなりやすい
ただし、式を見ただけで迷う場合は、必ず左からスタックを追います。
科目Bでどう使う?
科目Bでは、逆ポーランド表記そのものだけでなく、スタック処理のトレースとして考えると役立ちます。
例えば、
23+4×
を処理すると、
| 記号 | 操作 | スタック |
|---|---|---|
| 2 | push | [2] |
| 3 | push | [2, 3] |
| + | 2と3を計算し5をpush | [5] |
| 4 | push | [5, 4] |
| × | 5と4を計算し20をpush | [20] |
となります。
頭の中だけで追わず、
読んだ記号 | 操作 | スタック
の3列でメモするとミスを減らせます。
スタックの内容を1ステップずつ書き換える練習は、科目Bの疑似言語をトレースするときにもつながります。
よくある誤解・混同
値を読んだらすぐ計算する
値を読んだだけでは計算しません。
値
→ push
演算子
→ 計算
です。
演算子を読むとスタックの深さが2減る
2個popしますが、計算結果を1個pushするため、深さは結果として1だけ減ります。
最大スタック深さは変数の個数と同じ
違います。
4変数を使う式でも、
ab+c+d+
なら最大深さは2です。
変数の総数ではなく、途中で同時に何個積まれたかを数えます。
abcd+++ と ab+c+d+ は意味が違う
加算だけなら、どちらも
a+b+c+d
を計算します。
ただし、スタックの使い方と最大深さは異なります。
AB- は B-A
誤りです。
AB-
→ A-B
です。
減算と除算では順番を必ず確認します。
ポーランド表記法と同じ
違います。
+AB
→ ポーランド表記法(前置)
AB+
→ 逆ポーランド表記法(後置)
FIFOのキューでも同じように処理できる
逆ポーランド表記の評価では、最後に積んだ値を先に使うためLIFOのスタックが適しています。
スタックとキューの違いを整理したい場合は、スタックとキューの違いも確認してください。
確認問題(基本情報技術者試験対策)
次の逆ポーランド表記をスタックで処理するとき、最大スタック深さはいくつか。
ab+cde+++
- ア. 2
- イ. 3
- ウ. 4
- エ. 5
▶ クリックして答えと解説を見る(ここを開く)
正解:ウ
左から処理します。
a → [a] 深さ1
b → [a, b] 深さ2
+ → [a+b] 深さ1
c → [a+b, c] 深さ2
d → [a+b, c, d] 深さ3
e → [a+b, c, d, e] 深さ4
+ → [a+b, c, d+e] 深さ3
+ → [a+b, c+d+e] 深さ2
+ → [a+b+c+d+e] 深さ1
最大深さは4です。
このタイプは見た目だけで判断せず、迷ったらスタックの状態を1段ずつ書くのが安全です。
まとめ(試験直前用)
- 逆ポーランド表記法は、演算子を値の後ろに置く後置表記法
- 値を読んだらpushする
- 演算子を読んだら2個popし、計算結果をpushする
- 最大スタック深さは、途中で同時に積まれた値の最大個数
- 演算子が早く出るほど、途中結果へまとめられて深さを小さくしやすい
- 減算・除算はpopした値の順番に注意する
値 → push
演算子 → 2個pop → 計算 → 結果をpush
スタックそのものを復習したい場合は、スタックとは?へ戻ると理解をつなげやすくなります。