https://www.acmicpc.net/problem/1935

Baekjoon Online JudgeBaekjoon Online Judgewww.acmicpc.net

"""
피연산자를 먼저 표시하고 연산자를 나중에 표시하는 방법.
컴파일러가 사용하는 것으로 스택을 사용하는 예들 중 가장 빈번하게 등장.

"""

N= int(input()) # 5         # 1       # 3(5 4 1)
in_put= input() # ABC*+DE/- # AA+A+   # AB+C-B*
li_in_put_for=list(set(in_put))
li_in_put=list(in_put)
in_put_alpha = list(filter(str.isalpha,in_put)) # 알파벳만 걸러서 리스트로
#print(in_put_alpha)

# print('in_put:',in_put)

li_in_put= ''.join(li_in_put)
in_put_alpha = list(filter(str.isalpha,in_put)) # 피연산자(str)만 걸러서 리스트로

# print("in_put_alpha:",in_put_alpha)

stack = []
out_put=['만']
stack_index=0
for i in reversed(in_put): #-/ED+*CBA
  #print(i)
  if (i not in in_put_alpha): # 만약 알파벳이 아니거나 비어있는경우

    if (stack) and (out_put[-1] in in_put_alpha):  # 스텍에 연산자가 들어있고 아웃풋의 최신값이 알파벳인경우
      out_put.append(stack.pop()) # 스택에서 top을빼고 아웃풋에 첨부
      stack.append(i) # 그 다음에 스택에 연산자를 첨부

    elif out_put[-1] not in in_put_alpha:  # 아웃풋의 최신값이 연산자일 경우
      if stack==[]: # 스택이 비어 있는경우
        stack.append(i)
        # print("stack:",stack, "out_put:",out_put)
        # print("-------------------------------")
      elif (stack[-1] in ["+","-"]) and (i in ["+","-"]):  # 만약 현재 스택의 최신값이 + - 일 경우
        # print("아웃풋의 최신값이 연산자일 경우:",i)
        stack.append(i) # 연산자를 스택에 첨가
        # print("stack:",stack, "out_put:",out_put)
        # print("-------------------------------")
      elif (stack[-1] in ["*","/"]) and (i in ["*","/"]):
        # print("아웃풋의 최신값이 연산자일 경우:",i)
        stack.append(i) # 연산자를 스택에 첨가
        # print("stack:",stack, "out_put:",out_put)
        # print("-------------------------------")
      elif (stack[-1] in ["*","/"]) and (i in ["+","-"]):
        out_put.append(stack.pop()) # 스택에서 빼서 아웃풋에 첨가
        # print("stack:",stack, "out_put:",out_put)
        # print("-------------------------------")
      elif (stack[-1] in ["+","-"]) and (i in ["*","/"]):  # 만약 현재 스택의 최신값이 + - 일 경우
        # print("아웃풋의 최신값이 연산자일 경우:",i)
        stack.append(i) # 연산자를 스택에 첨가
        # print("stack:",stack, "out_put:",out_put)
        # print("-------------------------------")
     




  elif i in in_put_alpha: # 이번 인덱스가 알파벳이면  

    if out_put[-1] not in in_put_alpha:  # 현재 아웃풋의 최신 값이 알파벳이 아닐경우
      # print("피연산자:",i)
      out_put.append(i) # 피연산자를 아웃풋에 첨가
      # print("stack:",stack, "out_put:",out_put)
      # print("-------------------------------")

    elif out_put[-1] in in_put_alpha: # 만약 현재 아웃풋의 최신 값이 알파벳인 경우
      # print("아웃풋의 최신 값:",out_put[-1])
      out_put.append(stack.pop()) # 스택에서 top을빼고 아웃풋에 첨부
      out_put.append(i) # 그 다음에 피연산자를 아웃풋에 첨가
      # print("stack:",stack, "out_put:",out_put)
      # print("-------------------------------")
 

out_put= out_put[1:]  # '만'절삭
out_put.reverse()
# print(out_put)
out_put=''.join(out_put) # 문자열로 변환

for i in sorted(set(filter(str.isalpha,out_put))):  # 중복되는경우 없애기위해
  if i in in_put_alpha:
    out_put = out_put.replace(i,str(int(input())),li_in_put.count(i))

# print(out_put)
x = (eval(''.join(out_put)))  # 문자열로 된 식을 계산
# print("out_put:",out_put)
print("{:.2f}".format(x))




제발 알려주라... 아무리 대가리굴려도 이거 맞는데 자꾸 틀렸다함..