1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식
www.acmicpc.net
연산자 우선순위와 괄호를 고려하는 부분이 많이 까다로웠던 문제입니다. 😂
import sys
input = sys.stdin.readline
operators = {"/": 2, "*": 2, "+": 1, "-": 1, "(": 0}
stack = []
foluma = input()
for s in foluma:
if s == "\n":
continue
if s.isalpha():
print(s, end="")
elif s == "(":
stack.append(s)
elif s == ")":
while True:
temp = stack.pop()
if temp == "(":
break
print(temp, end="")
else:
# 스택의 가장 위에 있는 연산자가 현재 만난 연산자보다 우선순위가 높다면
# Ex. 스택에는 * 있고 현재 +을 만났다면 스택에 있는걸 먼저 수행함
# Ex. 스택에는 + 있고 현재 *을 만났다면 그냥 스택에 더하기만 할것 => 이래야 우선순위 높은 순서대로 실행되므로
while stack and operators[stack[-1]] >= operators[s]:
print(stack.pop(), end="")
stack.append(s)
while stack:
print(stack.pop(), end="")
'Koala - 4기' 카테고리의 다른 글
[BOJ] 2116 주사위 쌓기 (0) | 2021.07.25 |
---|---|
[BOJ] 2116 주사위 쌓기 (0) | 2021.07.25 |
[BOJ] 1918 후위표기식 (0) | 2021.07.24 |
[BOJ] 후위 표기식 1918번 (0) | 2021.07.24 |
[BOJ] 정보 상인 호석 22252번 (0) | 2021.07.24 |