[python]白駿/後列マーキング式2/1935号/スタック
質問する
接尾辞2題リンク
接尾辞式と各演算子に対応する値を指定する場合は、式を計算するプログラムを作成します.
入力
第1行は、被演算子の個数(1≦N≦26)を与える.次に、2行目に接尾辞タグが与えられます.(ここで、被演算子はA~Zのゼロ大文字であり、Aから順にN個のゼロ大文字のみを使用し、長さは100を超えない).3行目からN+2行目まで、各被演算子には対応する値がある.3行目はAの値、4行目はBの値、5行目はC...被演算子に対応する値が100以下の自然数が与えられる.
前から下位タグ式を計算する場合、式の結果と中間結果は-20億以上であり、20億以下の入力のみが与えられる.
計算結果を小数点2位に出力します.
コード#コード#
接尾辞2題リンク
接尾辞式と各演算子に対応する値を指定する場合は、式を計算するプログラムを作成します.
入力
第1行は、被演算子の個数(1≦N≦26)を与える.次に、2行目に接尾辞タグが与えられます.(ここで、被演算子はA~Zのゼロ大文字であり、Aから順にN個のゼロ大文字のみを使用し、長さは100を超えない).3行目からN+2行目まで、各被演算子には対応する値がある.3行目はAの値、4行目はBの値、5行目はC...被演算子に対応する値が100以下の自然数が与えられる.
前から下位タグ式を計算する場合、式の結果と中間結果は-20億以上であり、20億以下の入力のみが与えられる.
5
ABC*+DE/-
1
2
3
4
5
しゅつりょく計算結果を小数点2位に出力します.
6.20
方法コード#コード#
import sys
n = int(sys.stdin.readline())
strs = input()
# strs에서 중복을 제외한 후 알파벳만을 정렬해서 각 원소에 입력받은 수를 딕셔너리 형태로 저장
dict_ = {i : int(sys.stdin.readline()) for i in sorted(filter(lambda x : x.isalpha(), set(strs))) }
stack_ = []
for char in strs:
if char.isalpha() :
stack_.append(dict_[char])
else:
num2 = stack_.pop()
num1 = stack_.pop()
if char == '+' :
stack_.append(num1+num2)
elif char == '-' :
stack_.append(num1-num2)
elif char == '*' :
stack_.append(num1*num2)
elif char == '/' :
stack_.append(num1/num2)
print('{:.2f}'.format(stack_.pop()))
Reference
この問題について([python]白駿/後列マーキング式2/1935号/スタック), 我々は、より多くの情報をここで見つけました https://velog.io/@gandi0330/Python-백준-후위-표기식2-1935번-스택テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol