본문 바로가기
공부/알고리즘

[알고리즘][백준] 1918번 후위 표기식 - 파이썬(python) 풀이

by 무명오리 2024. 2. 26.

https://www.acmicpc.net/problem/1918

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의

www.acmicpc.net


1935번 후위 표기식2와 비슷하지만 더 어려웠다...

 

참고해서 만든 나의 코드

 

이번에는 stack에 연산자만 넣고 진행하게 되는데 그 생각이 쉽게 나지 않았다...  

import sys

input = sys.stdin.readline().rstrip()
input = "A*(B+C)"
answer = ""
stack = []  # 연산자만 넣음

for i in input:
    # (,) -> *,/ -> +-
    if not i.isalpha():
        # 괄호 시작
        if i == "(":
            stack.append(i)
        # *,/
        elif (i == "*") or (i == "/"):
            # stack 존재 & A*B*C -> AB*C*
            while stack and (stack[-1] == "*" or stack[-1] == "/"):
                answer += stack.pop()
            stack.append(i)
        # +-
        elif (i == "+") or (i == "-"):
            # stack 존재 & *,/,+,- 경우 pop
            while stack and stack[-1] != "(":
                answer += stack.pop()
            stack.append(i)
        # 괄호 끝
        elif i == ")":
            # +-*/ pop & (도 pop
            while stack and stack[-1] != "(":
                answer += stack.pop()
            stack.pop()
    # 알파벳
    else:
        answer += i

while stack:
    answer += stack.pop()

print(answer)