STUDY/Algorithm

[백준] 1918 후위 표기식 python

sinawi95 2021. 5. 9. 18:31
728x90

www.acmicpc.net/problem/1918

 

1918번: 후위 표기식

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

www.acmicpc.net

import sys; input = sys.stdin.readline
ans = ''
s = []
for ch in input().rstrip():
    if ch == '+' or ch == '-':
        while s:
            if s[-1] == '(':
                break
            ans += s.pop()
        s.append(ch)
    elif ch == '*' or ch == '/':
        while s:
            if s[-1] == '(' or s[-1] == '+' or s[-1] == '-':
                break
            ans += s.pop()
        s.append(ch)
    elif  ch == '(':
        s.append(ch)
    elif ch == ')':
        while s:
            tmp = s.pop()
            if tmp == '(':
                break
            ans += tmp
    else:
        ans += ch
else:
    while s:
        ans += s.pop()
print(ans)

스택을 활용하여 풀면된다

후위표기로 바꿀때 연산자끼리의 우선순위를 생각하면 되는데,

stack의 맨 윗부분이 현재의 연산자보다 우선순위가 높은 경우에 빼서 결과에 넣어주면된다.

이때 연산자끼리의 우선순위는 스택 내부의 괄호 < 덧셈, 뺄셈 기호 < 곱하기, 나누기 기호 < 스택 외부의 괄호 와 같이 나타낼수 있다.

 

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 1991 트리순회 python  (0) 2021.05.09
[백준] 1967 트리의 지름 python  (0) 2021.05.09
[백준] 1629 곱셈 python  (0) 2021.05.08
[백준] 1167 트리의 지름 python  (0) 2021.05.08
[백준] 11726 2xn 타일링 C  (0) 2021.05.05