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))
제발 알려주라... 아무리 대가리굴려도 이거 맞는데 자꾸 틀렸다함..
너무길어요
그게 무슨 뜻임
주석 반 코드 반 ㄷㄷ