Post

[BOJ] 1918. 후위 표기식(python)

📌문제

Alt text

💪아이디어

  1. 연산자, 피연산자 구별하기
    피연산자는 알파벳이기 때문에 isalpha를 사용하여 구별한다.
    연산자는 ` (, ), *, /, +, -`이다. 피연산자는 반환 문자열에 넣어주고 연산자는 2. 과정으로 추가, 삭제한다.

  2. 연산자 우선순위
    연산자만 모아두는 stack이 있어야한다.
    연산자의 우선순위는 다음과 같다.

  • ( , )
    • 연산자가 ()가 반드시 나오기 때문에 범위표시를 위해 stack에 넣어준다.
    • 연산자가 )(가 나오기 전까지 pop한 연산자를 반환 문자열에 넣어준다. (를 없애기위해 pop한다.
  • *, /
    • stack의 마지막이 *거나 /때까지 pop하고 그 연산자를 반환 문자열에 넣는다. 그 다음 자기자신은 stack에 넣는다.
  • +, -
    • stack의 마지막이 (가 아닐때까지 pop한 연산자를 반환 문자열에 넣고 자기자신을 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.