【解アルゴリズム問題】【Python】白駿1935号:接尾辞2

9097 ワード


白駿1935題リンク:https://www.acmicpc.net/problem/1935


📑 問題の説明


接尾辞式と各演算子に対応する値が与えられた場合、計算プログラムが作成されます.
入力:被演算子の個数、接尾辞、被演算子に対応する値
出力:接尾辞式の結果

💡 トラブルシューティング方法

  • 個の被演算子が現れると、pushはスタック
  • に達する.
  • 被演算子はアルファベット(A、B、C...)ASKIDコード
  • を使用して、各アルファベットの数字を理解します.
  • 演算子が現れると、スタック内の最後の2つの数字が演算され、スタック
  • に再びプッシュされる.

    💻 コード#コード#

    import sys
    
    def postfix(n, post, num_list):
        stack = list()
        temp = 0
        result = 0
        for i in range(len(post) - 1):
            if (post[i] != '+' and post[i] != '-' and post[i] != '*' and post[i] != '/'):
                stack.append(num_list[ord(post[i]) - 65])
            elif (post[i] == '+'):
                cur = stack.pop()
                prev = stack.pop()
                stack.append(prev + cur)
            elif (post[i] == '-'):
                cur = stack.pop()
                prev = stack.pop()
                stack.append(prev - cur)
            elif (post[i] == '*'):
                cur = stack.pop()
                prev = stack.pop()
                stack.append(prev * cur)
            elif (post[i] == '/'):
                cur = stack.pop()
                prev = stack.pop()
                stack.append(prev / cur)
    
        return stack.pop()
    
    if __name__ == '__main__':
        n = int(sys.stdin.readline())
        post = sys.stdin.readline()
        num_list = list()
        for i in range(n):
            num = int(sys.stdin.readline())
            num_list.append(num)
        answer = postfix(n, post, num_list)
        print("{:.2f}".format(answer))
    

    💟 詳細