후위표기식 구하기.
입력 | 출력 |
---|---|
A*(B+C) | ABC+* |
: 입력값 전체에 괄호를 치고 알파벳이면 출력. 연산자이면 스택에 넣고 )
를 만날 때마다 연산자 pop해서 출력 ---> 틀렸습니다.
주어진 입력값이 친절하게 괄호가 모두 있는 게 아니므로, 연산자 우선순위를 고려해야 한다.
1. 알파벳이면 출력한다.
2.(
를 만나면 스택에 넣는다.
3.)
를 만나면(
가 나올때까지 출력한다(연산자).
4. 연산자를 만났을 때, 스택의 top원소의 우선순위와 연산자의 우선순위를 비교하여, 연산자의 우선순위가 작거나 같을 동안 스택의 원소를 pop하여 출력하고 연산자를 스택에 넣어준다. 만약 크다면 바로 스택에 넣어준다.
5. 마지막으로 스택에 남아있는 연산자를 출력한다.
string = input()
priority = {'*': 2, '/': 2, '+': 1, '-': 1, '(': 0}
ans = ''
stack = []
for s in string:
if s.isalpha():
ans += s
elif s == '(':
stack.append(s)
elif s == ')':
while stack and stack[-1] != '(':
ans += stack.pop()
stack.pop()
else:
while stack and priority[s] <= priority[stack[-1]]:
ans += stack.pop()
stack.append(s)
while stack:
ans += stack.pop()
print(ans)