https://www.acmicpc.net/problem/1918
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의
www.acmicpc.net
s = input()
prior = {"+": 0, "-": 0, "*": 1, "/": 1, "(": 2}
stack = []
result = ""
for c in s:
if c.isalpha(): # 문자
result += c
else: # 연산자
if c == ")":
while stack[-1] != "(":
result += stack.pop()
else:
stack.pop()
else:
while stack and prior[c] <= prior[stack[-1]] and stack[-1] != "(":
result += stack.pop()
stack.append(c)
else:
while stack:
result += stack.pop()
print(result)
먼저 소괄호를 생각하지말고 단순 사칙연산식만 생각해본다.
A+B*C-D/E 는 ABC*+DE/-로 나타내진다.
값인 ABCDE는 순서 그대로 나온 반면, 연산자는 등장 순서가 바뀌었다.
연산자를 대상으로 스택 자료구조를 이용하는건 아닐까 의심해본다.
코드를 완성한후, 소괄호 개념을 추가해서 생각해본다.
'알고리즘 > 백준-파이썬' 카테고리의 다른 글
[백준] 10808번 (python 파이썬) (0) | 2022.04.08 |
---|---|
[백준] 1935번 (python 파이썬) (0) | 2022.04.08 |
[백준] 17299번 (python 파이썬) (0) | 2022.04.07 |
[백준] 17298번 (python 파이선) (0) | 2022.04.06 |
[백준] 10799번 (python 파이썬) (0) | 2022.04.06 |