コンテンツにスキップ

015: そして逆ポーランド記法へ

ヒント / 解答

難易度: ☆☆

問題

関数 infix_to_rpn(expression) を書いてください。 この関数は、中置記法で書かれた式を、逆ポーランド記法の式に変換して返します。

中置記法では、演算子を被演算子の間に書きます。 たとえば、3 + 4 は中置記法です。 逆ポーランド記法では、同じ式を 3 4 + と書きます。

この問題では、入力のトークンは空白で区切られているものとします。 戻り値も、空白区切りの文字列にしてください。

制約

  • 入力は正しい式です。
  • 数値は整数です。
  • 演算子は +-*/ です。
  • 括弧 () を扱います。
  • */ は、+- より優先順位が高いものとします。
  • 同じ優先順位の演算子は、左から右へ結合します。
  • 単項マイナスは扱いません。

>>> infix_to_rpn("3 + 4")
'3 4 +'
>>> infix_to_rpn("3 + 4 * 2")
'3 4 2 * +'
>>> infix_to_rpn("( 3 + 4 ) * 2")
'3 4 + 2 *'
>>> infix_to_rpn("5 + ( 1 + 2 ) * 4 - 3")
'5 1 2 + 4 * + 3 -'

確認

前問のプログラムに渡せる形の文字列を返すことを確認してください。

>>> infix_to_rpn("3 + 4 * 2 / ( 1 - 5 )")
'3 4 2 * 1 5 - / +'