알고리즘 스터디

[백준] 1918 후위표기식 파이썬

문제

https://www.acmicpc.net/problem/1918

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식

www.acmicpc.net

 


풀이

 

처음에 if l == '+' or l=='-' 안의 와일문 조건에서

stack[-1] != '(' 대신

stack[-1] != '+' or stack[-1] != '-'

으로 조건문을 작성했다가 틀렸다.

같은 우선순위인 +-를 출력해주려다가 그 윗순위인 */를 빼먹었기 때문..

line = input()
stack = []

for l in line:
    if 'A' <= l <= 'Z':
        print(l, end='')
    else:
        if l == '(':
            stack.append('(')
        elif l == ')':
            while stack[-1] != '(':
                print(stack.pop(), end='')
            stack.pop()
        else:
            if l == '*' or l =='/':
                while stack and (stack[-1] == '/' or stack[-1] == '*'):
                    print(stack.pop(), end='')
            if l == '+' or l == '-':
                while stack and stack[-1] != '(':
                    print(stack.pop(), end='')
            stack.append(l)
while stack:
    print(stack.pop(), end='')