인프런 김태원님의 파이썬 알고리즘 문제풀이를 듣고 작성한 글입니다.
파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의
파이썬을 이용한 코딩테스트 문제풀이를 합니다., - 강의 소개 | 인프런...
www.inflearn.com

#강의 풀이
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
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의
www.acmicpc.net
'알고리즘 (Python)' 카테고리의 다른 글
부분집합 구하기 (DFS) (0) | 2022.04.01 |
---|---|
응급실(큐) (0) | 2022.03.30 |
쇠막대기(스택) (0) | 2022.03.30 |
가장 큰 수(스택) (0) | 2022.03.27 |
역수열 (그리디) (0) | 2022.03.26 |
댓글