[정답 코드]
stack = []
ans = ''
mid = list(input().rstrip())
for i in range(len(mid)):
if mid[i] == '(':
stack.append(mid[i])
elif mid[i] == ')':
item = stack.pop()
while item != '(':
ans += item
item = stack.pop()
elif mid[i] == '+' or mid[i] == '-':
if not stack:
stack.append(mid[i])
else:
while stack and stack[len(stack) - 1] != '(':
ans += stack.pop()
stack.append(mid[i])
elif mid[i] == '*' or mid[i] == '/':
if not stack:
stack.append(mid[i])
else:
top = stack[len(stack) - 1]
if top == '*' or top == '/':
ans += stack.pop()
stack.append(mid[i])
else:
ans += mid[i]
while stack:
ans += stack.pop()
print(ans)
[풀이]
+
,-
< *
, -
< (
][오류 해결]
✔ 4번 과정에서 오류가 있었다.
우선순위가 낮은 연산자를 만날 때(peek)까지 계속 pop해주어야 하는데, 이 과정을 한번만 하게 했다.
elif mid[i] == '+' or mid[i] == '-':
-> else:
이전 코드
else:
top = stack[len(stack) - 1]
if top == '*' or top == '/' or top == '+' or top == '-':
ans += stack.pop()
''' 오류 해결을 위해 추가한 부분
if stack:
top = stack[len(stack) - 1]
if top == '+' or top == '-':
ans += stack.pop()
'''
stack.append(mid[i])
반례 : A+B*C+D*E+G
정답 : ABC*+DE*+G+
오답 : ABC*DE*G+++
[적용 자료구조 및 알고리즘]
더 자세한 설명 및 이해를 위해 전위, 중위, 후위 표기식 를 참고해보자