CodingTest/Baekjoon

[baekjoon] 백준 1918번(파이썬): 후위 표기식

JunJangE 2021. 9. 16. 17:56

문제

 

1918번: 후위 표기식

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

www.acmicpc.net

알고리즘

- 입력받은 문자를 반복문을 통해 확인한다.

- 피연산자인지 연산자인지 확인한다.

- 연산자라면 '*' 와 '/' 는 스택의 맨 뒤에 요소가 '*' 이거나 '/' 일때까지 반복하여 결과값에 더해준다.

- 나머지 연산자는 스택의 마지막이 '(' 일때까지 반복하여 결과값에 더해준다,

-  마지막에 스택 안에 있는 모든 요소를 팝하여 결과값에 더해준다.

코드

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

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com