중위표기식이 입력되면 후위표기식으로 변환하는 프로그램을 작성하세요.
중위표기식은 우리가 흔히 쓰은 표현식입니다. 즉 3+5 와 같이 연산자가 피연산자 사이에 있 으면 중위표기식입니다.
후위표기식은 35+ 와 같이 연산자가 피연산자 뒤에 있는 표기식입니다.
예를 들어 중위표기식이 3+5*2 를 후위표기식으로 표현하면 352*+ 로 표현됩니다.
만약 다음과 같이 연산 최우선인 괄호가 표현된 식이라면 (3+5)*2 이면 35+2* 로 바꾸어야 합니다.
※후위 표기식이 이해가 안되면 구글링으로 공부해보는 것도 좋습니다.
▣ 입력설명
첫 줄에 중위표기식이 주어진다. 길이는 100을 넘지 않는다. 식은 1~9의 숫자와 +, -, *, /, (, ) 연산자로만 이루어진다.
▣ 출력설명 후위표기식을 출력한다.
▣ 입력예제 1
3+5*2/(7-2)
▣ 출력예제 1
352*72-/+
▣ 입력예제 2
3*(5+2)-9
▣ 출력예제 2
352+*9-
#import sys
#sys.stdin = open('in3.txt', 'rt')
a = input()
res = ''
stack = []
for i in range(len(a)):
if '1' <= a[i] <= '9':
res += a[i]
else:
if not stack or a[i] == '(':
stack.append(a[i])
elif a[i] == '+' or a[i] == '-':
while stack and (stack[-1] == '+' or stack[-1] == '-' or stack[-1] == '*' or stack[-1] == '/'):
res += stack.pop()
stack.append(a[i])
elif a[i] == '*' or a[i] == '/':
while stack and (stack[-1] == '*' or stack[-1] == '/'):
res += stack.pop()
stack.append(a[i])
else: # ')'
while stack[-1] != '(':
res += stack.pop()
stack.pop()
else:
while stack:
res += stack.pop()
print(res)
'Algorithm > Python' 카테고리의 다른 글
036 - 공주 구하기(큐 자료구조로 해결) (0) | 2023.08.18 |
---|---|
035 - 후위식 연산 (0) | 2023.08.18 |
033 - 쇠막대기 (0) | 2023.08.16 |
032 - 가장 큰 수 (0) | 2023.08.16 |
031 - 역수열(그리디) (0) | 2023.08.16 |