문제
알고리즘
- 입력받은 문자를 반복문을 통해 확인한다.
- 피연산자인지 연산자인지 확인한다.
- 연산자라면 '*' 와 '/' 는 스택의 맨 뒤에 요소가 '*' 이거나 '/' 일때까지 반복하여 결과값에 더해준다.
- 나머지 연산자는 스택의 마지막이 '(' 일때까지 반복하여 결과값에 더해준다,
- 마지막에 스택 안에 있는 모든 요소를 팝하여 결과값에 더해준다.
코드
import sys
s = list(map(str, sys.stdin.readline().strip()))
stack = []
res = ""
# 입력받은 문자를 반복문을 통해 확인
for i in s:
# 피연산자인지 확인
if i.isalpha():
res += i
elif i == '(':
stack.append(i)
elif i == '*' or i == '/':
while stack and (stack[-1] == '*' or stack[-1]=='/'):
res += stack.pop()
stack.append(i)
elif i == '+' or i == '-':
while stack and stack[-1] != '(':
res += stack.pop()
stack.append(i)
elif i == ')':
while stack and stack[-1] != '(':
res += stack.pop()
stack.pop()
# 스택안에 남아있는 값을 pop
while stack:
res += stack.pop()
print(res)
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 1966번(파이썬): 프린터 큐 (0) | 2021.09.17 |
---|---|
[baekjoon] 백준 10773번(파이썬): 제로 (0) | 2021.09.16 |
[baekjoon] 백준 11656번(파이썬): 접미사 배열 (0) | 2021.09.14 |
[baekjoon] 백준 10824번(파이썬): 네 수 (0) | 2021.09.14 |
[baekjoon] 백준 11655번(파이썬): ROT13 (0) | 2021.09.14 |