https://www.acmicpc.net/problem/1918
1918번: 후위 표기식첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의www.acmicpc.net
진짜 ㅈ 같은 문제다.
애초에 후위표기식 개념이 헷갈려서 한참 해멨다.
%%주의%%
만일 곱하기나 나누기면, stack의 출구가 곱하기나 나누기가 아닐때까지 pop해주고(answer에 추가)
부호를 더해준다.
여기서 한참해멧는데, 예제에는 이런식이 없어서 생각도 못했었다.
!! 더하기나 빼기는 곱하기나 나누기를 모두 계산한 후에 계산하기 때문에, 스택에 남아있어야 한다.!!!
이걸간과해도 예제는 맞지만,
AB-CD/E 등의 식 계산이 틀리계된다.
정답=
AB-CD/E 오답=
ABCD-E/
빨리 골드찍고싶다
a=input()s=[]#스택answer='' for i in a: if i.isalpha(): #알파벳이면 바로 추가
answer +=i elif i=='(': #괄호가 열리면 스택에 추가 s.append(i)
elif i=='*'or i=='/': #곱하기나 나누기면
while s and (s[-1] == '*' or s[-1] == '/' ): #+,-는 *,/ 계산 후에 계산함으로
answer+=s.pop() # 곱셈뺄셈 다빼줌 s.append(i) #부호 추가
elif i=='+' or i=='-': #더하기나 빼기면 while s and s[-1] != '(' : #괄호가아닌이상
answer += s.pop() #정답에 스택pop s.append(i) #부호 스택에 추가
elif i==')': #괄호가 닫히면 while s[-1] !='(' : #괄호가시작됬을때까지
answer +=s.pop() #스택에있는 모든 부호 정답으로 보내기 s.pop() #여는부호는 제거
while s: #마지막으로남아있는 스택에 answer+=s.pop()print(answer)