인프런 김태원님의 파이썬 알고리즘 문제풀이를 듣고 작성한 글입니다.
#강의 풀이
a = input()
stack = []
res = ''
for x in a:
if x.isdecimal():
res += x
else:
if x == '(':
stack.append(x)
elif x == '*' or x == '/':
while stack and (stack[-1] == '*' or stack[-1] == '/'):
res += stack.pop()
stack.append(x)
elif x == '+' or x == '-':
while stack and stack[-1] != '(':
res += stack.pop()
stack.append(x)
elif x == ')':
while stack and stack[-1] != '(':
res += stack.pop()
stack.pop()
while stack:
res += stack.pop()
print(res)
1. 피연산자는 그대로 출력
2. 여는 괄호이면 stack에 추가
3. 연산자가 * / 이면 stack안에 * / 를 pop하고 본인 추가
4. 연산자가 + - 이면 stack안에 여는 괄호가 아닐때까지 pop 하고 본인 추가
5. 닫힌 괄호이면 여는 괄호가 아닐때까지 pop하고 여는 괄호도 pop
6. stack에 남은 연산자 모두 출력
어렵구만.
똑같은 문제 (골드3 ㄷ)
https://www.acmicpc.net/problem/1918
'알고리즘 (Python)' 카테고리의 다른 글
부분집합 구하기 (DFS) (0) | 2022.04.01 |
---|---|
응급실(큐) (0) | 2022.03.30 |
쇠막대기(스택) (0) | 2022.03.30 |
가장 큰 수(스택) (0) | 2022.03.27 |
역수열 (그리디) (0) | 2022.03.26 |
댓글