✔ 풀이를 위한 아이디어
✔ 후위 표기식이란?
우리가 일반적으로 사용하는 중위 표기식 (infix) 과 다르게, 후위 표기식 (postfix) 은 연산자를 피연산자 뒤에 두는 방법
왼쪽부터 순서대로 계산할 수 있기 때문에, 컴퓨터가 연산할 때 적합함
* 아래의 규칙을 지켜서 표기해야 함
1. 피연산자는 그대로 출력한다.
2. 연산자는 stack이 비어있을 경우 stack에 바로 추가 (push) 한다.
3. 연산자는 stack의 top이 자신보다 우선순위가 낮을 경우에만 push 하며, 자신보다 우선순위가 높거나 같을 경우에는 계속해서 pop 한다.
4. 단, 여는 괄호는 닫는 괄호가 아니면 pop 하지 않으며, 닫는 괄호를 만나면 여는 괄호가 나올 때까지 pop 해서 출력한다.
5. 마지막에 stack에 남아 있는 연산자들을 pop 해서 출력한다.
✔ 정답 코드
import sys
mathEx = list(sys.stdin.readline().strip()) # 입력 받은 문자열 (중위 표기식)
stack = [] # 연산자를 담을 stack
printString = '' # 출력할 문자열 (후위 표기식)
for c in mathEx: # 문자열을 list로 바꿔준 뒤, 하나씩 탐색
if c >= 'A' and c <= 'Z': # 규칙 1
printString += c
elif c == '(':
stack.append(c)
elif c == ')':
while stack and stack[-1] != '(':
printString += stack.pop()
stack.pop()
elif c == '+' or c == '-':
while stack and stack[-1] != '(':
printString += stack.pop()
stack.append(c)
elif c == '*' or c == '/':
while stack and (stack[-1] == '*' or stack[-1] == '/'):
printString += stack.pop()
stack.append(c)
while stack: # 규칙 5
printString += stack.pop()
print(printString)
elif c == '(':
stack.append(c)
elif c == ')':
while stack and stack[-1] != '(':
printString += stack.pop()
stack.pop()
elif c == '+' or c == '-':
while stack and stack[-1] != '(':
printString += stack.pop()
stack.append(c)
elif c == '*' or c == '/':
while stack and (stack[-1] == '*' or stack[-1] == '/'):
printString += stack.pop()
stack.append(c)