1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | ''' BOJ - 후위 계산식 - 문자열, Stack = 연산자의 우선순위를 나눈 뒤, 일반 항은 바로 Answer에 추가시키고, 괄호나 연산자가 오면 스택에서 우선순위에 따라 처리한다. ''' import sys n = sys.stdin.readline().strip() def prior(opr): if opr == '*' or opr == '/': return 4 elif opr == '+' or opr == '-': return 2 else: return 0 stack = [] operator = ['+', '-', '*', '/'] answer = '' for i in range(len(n)): if n[i] in operator: if stack: if prior(stack[-1]) >= prior(n[i]): # 스택의 top이 지금 연산자보다 우선순위가 큰 경우 빼내서 바로 answer에 붙여준다 answer += stack.pop() if stack: if prior(stack[-1]) == prior(n[i]): answer += stack.pop() stack.append(n[i]) else: stack.append(n[i]) else: stack.append(n[i]) else: stack.append(n[i]) else: stack.append(n[i]) elif n[i] == '(': # 여는 괄호는 바로 stack에 넣어준다 stack.append(n[i]) elif n[i] == ')': # 닫는 괄호를 받으면 스택에서 여는 괄호가 나올때까지 모두 answer에 붙여준다 while True: if stack[-1] == '(': stack.pop() break else: answer += stack.pop() else: answer += n[i] while stack: answer += stack.pop() print(answer) | cs |
'알고리즘' 카테고리의 다른 글
[Programmers] 경주로 건설 [ python, bfs ] (0) | 2021.04.18 |
---|---|
[BOJ] 1967 트리의 지름 - 그래프 이론, 다익스트라 (0) | 2020.11.02 |
[BOJ] 2668 단지번호붙이기 - dfs, graph (0) | 2020.11.01 |
[BOJ] 1786 찾기 - kmp알고리즘 (0) | 2020.10.29 |
[BOJ] 1629 곱셈 - 분할정복 (0) | 2020.10.29 |