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

Baekjoon Online JudgeBaekjoon Online Judgewww.acmicpc.net


1935번 후위연산자2 문제인데


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

"""

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)) # 알파벳만 걸러서 리스트로

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

stack = []
out_put=['만']
stack_index=0
for i in reversed(in_put): #-/ED+*CBA
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)
elif (stack[-1] in ["+","-"]) and (i in ["+","-"]): # 만약 현재 스택의 최신값이 + - 일 경우
stack.append(i) # 연산자를 스택에 첨가
elif (stack[-1] in ["*","/"]) and (i in ["*","/"]):
stack.append(i) # 연산자를 스택에 첨가
elif (stack[-1] in ["*","/"]) and (i in ["+","-"]):
out_put.append(stack.pop()) # 스택에서 빼서 아웃풋에 첨가
elif (stack[-1] in ["+","-"]) and (i in ["*","/"]): # 만약 현재 스택의 최신값이 + - 일 경우
stack.append(i) # 연산자를 스택에 첨가




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

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

elif out_put[-1] in in_put_alpha: # 만약 현재 아웃풋의 최신 값이 알파벳인 경우
out_put.append(stack.pop()) # 스택에서 top을빼고 아웃풋에 첨부
out_put.append(i) # 그 다음에 피연산자를 아웃풋에 첨가
out_put= out_put[1:] # '만'절삭
out_put.reverse()
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)) # A,B,C 같은 피연산자들에 값 설정

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




테스트케이스 전부 깔끔하게 잘 나오는데 왜 런타임에러가 뜨는거임?