1string = list(input())
2
3priority = {'(':0, ')':0, '+':1, '-':1, '*':2, '/':2}
4operator = []
5result = ''
6
7for c in string:
8 if c.isalpha():
9 result += c
10 elif c == '(':
11 operator.append(c)
12 elif c == ')':
13 while operator:
14 op = operator.pop()
15 if op == '(':
16 break
17 result += op
18 else:
19 if operator:
20 if priority[operator[-1]] < priority[c]:
21 operator.append(c)
22 else:
23 while operator and priority[operator[-1]] >= priority[c]:
24 result += operator.pop()
25 operator.append(c)
26 else:
27 operator.append(c)
28while operator:
29 result += operator.pop()
30
31print (result)
문제
- 중위 표기법으로 입력된 수식을 후위 표기법으로 변환하는 문제이다.
- 예제
- 입력 : A+B*C-D/E
- 출력 : ABC*+DE/-
해결방법
- 입력받은 문자열을 리스트에 담긴 문자별로 순회한다.
- 해당 문자가 알파벳인 경우 : 바로 결과 문자열에 더한다
- 해당 문자가 여는 괄호인 경우 : stack에 push한다
- 해당 문자가 닫는 괄호인 경우 : 여는 괄호가 나올때까지 stack을 pop한다
- 해당 문자가 연산자인 경우 (+, -, *, /)
- 스택의 top에 있는 연산자와 우선순위를 비교하여 추가하는데,
- top에 있는 연산자의 우선순위가 해당 연산자보다 작을때까지 pop한다
- 스택의 남은 연산자를 추가하여 결과값을 출력한다.