본문 바로가기

백준 문제풀이

1918 - 후위 표기식 / gold 2 / 스택, 자료구조

'''
1918 - 후위 표기식 / gold 2 / 스택, 자료구조
'''

infix = input()

op_stack = []
postfix = ''

for v in infix:
    if v.isalpha():
        postfix += v
    else:
        if v == '(':
            op_stack.append(v)
        elif v == '*' or v == '/':
            while op_stack and (op_stack[-1] == '*' or op_stack[-1] == '/'):
                postfix += op_stack.pop()
            op_stack.append(v)
        elif v == '+' or v == '-':
            while op_stack and op_stack[-1] != '(':
                postfix += op_stack.pop()
            op_stack.append(v)
        elif v == ')':
            while op_stack[-1] != '(':
                postfix += op_stack.pop()
            op_stack.pop()

while op_stack:
    postfix += op_stack.pop()

print(postfix)

 

입력받은 infix(중위 표기식)을 for문 통해 비교하기

 

1. 피연산자 (알파벳) 일 때

  •     postfix 문자열에 추가

 

2. 연산자 일 때

  1. v == ( 일 때, stack에 추가
  2. v == * / 일 때, stack에 있던 * / 을 pop해서 postfix에 추가하기 v를 stack에 추가
  3. v == + - 일 때, stack에 있던 * / + - 을 pop 해서 postfix에 추가 v를 stack에 추가 
  4.  v == ) 일 때, stack에 있던 * / + - 을 pop 해서 postfix에 추가 ☞ stack 한번 더 pop해서 ( 지우기

 

op_stack에 남은 연산자가 있으면, postfix에 추가하기