[BOJ] 1918. 후위 표기식(python)
📌문제
💪아이디어
연산자, 피연산자 구별하기
피연산자는 알파벳이기 때문에 isalpha를 사용하여 구별한다.
연산자는 ` (, ), *, /, +, -`이다. 피연산자는 반환 문자열에 넣어주고 연산자는 2. 과정으로 추가, 삭제한다.
연산자 우선순위
연산자만 모아두는 stack이 있어야한다.
연산자의 우선순위는 다음과 같다.
- ( , )
- 연산자가
(
면)
가 반드시 나오기 때문에 범위표시를 위해 stack에 넣어준다. - 연산자가
)
면(
가 나오기 전까지 pop한 연산자를 반환 문자열에 넣어준다.(
를 없애기위해 pop한다.
- 연산자가
- *, /
- stack의 마지막이
*
거나/
때까지 pop하고 그 연산자를 반환 문자열에 넣는다. 그 다음 자기자신은 stack에 넣는다.
- stack의 마지막이
- +, -
- stack의 마지막이
(
가 아닐때까지 pop한 연산자를 반환 문자열에 넣고 자기자신을 stack에 넣는다.
- stack의 마지막이
🥂코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys; input = sys.stdin.readline
s = input().rstrip()
answer = ""
stack = []
for c in s:
if c.isalpha(): answer += c
else:
if c=='(': stack.append(c)
elif c=='*' or c=='/':
while stack and (stack[-1] == '*' or stack[-1] == '/'):
answer += stack.pop()
stack.append(c)
else:
while stack and stack[-1] != '(':
answer += stack.pop()
if c == ')': stack.pop()
else: stack.append(c)
while stack: answer += stack.pop()
print(answer)
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.