반응형
https://www.acmicpc.net/problem/1918
string = [x for x in input()]
opers = []
dct = {}
dct['*'] = 1
dct['/'] = 1
dct['+'] = 2
dct['-'] = 2
result = ''
count = 0
while string:
elem = string.pop(0)
if elem.isalpha():
result += elem
else:
if not opers:
if elem == '(':
count += 1
opers.append(elem)
else:
if elem == '(':
count += 1
opers.append(elem)
elif elem == ')':
while opers[-1] != '(':
result += opers.pop()
opers.pop()
count -= 1
else:
while opers:
if opers[-1] == '(':
break
if dct[opers[-1]] <= dct[elem]:
result += opers.pop()
else:
break
opers.append(elem)
while opers:
result += opers.pop()
print(result)
중위 표기식을 후위 표기식으로 바꾸는 법을 여기서 떠올려서 풀기란 매우 쉽지 않다.
바꾸는 원칙 같은 건 인터넷을 참고하고 구현에 초점을 맞춰서 문제를 풀어보는 것이 맞는 듯하다.
댓글