본문 바로가기
알고리즘/[python] 백준 BOJ

[Python] 백준 1918 후위 표기식

by Alan_Kim 2022. 12. 15.
728x90
반응형

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

 

1918번: 후위 표기식

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

www.acmicpc.net

 

문제 해결

- 하나씩 뺐을 때 문자/괄호/연산부호 분리해서 문자와 괄호,연산부호와 분리한다음 재배열을 해야한다. 어떻게 해야할까... => 문자는 그대로 출력하므로 뽑으면 바로 문자열에 이어 붙이고 괄호,연산부호는 stack 안에 넣은 후 배열 하는 것이 좋을 것이다.

- 이제 순서에 대해서 고민을 해야하는데 이는 그림으로 생각을 해야지 편하다.(그림은 직접 그려보길 추천한다. 여러가지 경우가 있고 해봐야지 감이온다.) 사실 몇 개 그렸는데 뭔가 아쉬워서 첨부하지 않는다..

 

 

CODE

import sys
input = sys.stdin.readline

cal = list(input().strip())
stack = []
r = ''
for spell in cal:
    if 'A' <= spell <='Z':
        r += spell   
    else:
        if spell == '(':
            stack.append(spell)
        elif spell == '*' or spell=='/':
            while stack and (stack[-1] == '*' or stack[-1]=='/'):
                r += stack.pop()
            stack.append(spell)
        elif spell == '+' or spell=='-':
            while stack and stack[-1] !='(':
                r += stack.pop()
            stack.append(spell)
        elif spell ==')':
            while stack and stack[-1] != '(':
                r += stack.pop()
            stack.pop()
            
while stack:
    r += stack.pop()
print(r)
728x90
반응형

댓글