1918: 후위 표기식

ewillwin·2023년 3월 4일
0

Problem Solving (BOJ)

목록 보기
4/230

  • 우선순위: '(', ')' >>> '*', '/' >>> '+', '-'
  • 입력받은 중위 표기식을 순회하면서 진행
  • 피연산자인 경우 바로 result string에 concat
  • '('인 경우에는 stack에 append -> 괄호 시작의 flag 역할
  • ')'인 경우에는 괄호 시작의 flag, 즉 '('를 만날때까지 stack에 있는 연산자를 pop해주고 result string에 concat
  • '*', '/'의 경우에는 괄호를 제외한 연산자들 중에서 가장 우선 순위가 높기 때문에 stack에 먼저 들어간 '*', '/'이 있다면 pop해주고 result string에 concat
  • '+', '-'의 경우에는 가장 우선순위가 낮은 연산자들이기 때문에 stack에 있는 모든 연산자들을 pop해주고 result string에 concat 해주어야함. (단, '('를 만났을 경우에는 ')' 닫힌 괄호와 같이 처리해주어야 하기 때문에 괄호가 아닌 '*', '/', '+', '-'의 경우에만 pop)
  • 중위 표기식 순회가 끝난 후에도 stack에 남아있는 연산자들을 pop해주고 result string에 concat
import sys
from collections import deque

E = list(sys.stdin.readline()[:-1]) #중위표기식

stack = []; result = ''
for e in E:
    if e >= 'A' and e <= 'Z':
        result += e
    elif e == '(':
        stack.append(e)
    elif e == ')':
        while stack:
            if stack[-1] == '(':
                break
            else:
                result += stack.pop()
        stack.pop()
    elif e == '*' or e == '/':
        while stack and (stack[-1] == '*' or stack[-1] == '/'):
            result += stack.pop()
        stack.append(e)
    elif e == '+' or e == '-':
        while stack and (stack[-1] != '('):
            result += stack.pop()
        stack.append(e)
    else:
        continue

while stack:
    result += stack.pop()

print(result)

아 어려움 난 빡대가리야

profile
Software Engineer @ LG Electronics

0개의 댓글