데브코스 TIL/자료구조, 알고리즘

12강: 수식의 후위 표기

예니ㅣ 2023. 10. 17. 16:53

강의

중위 표기법 (infix notation) : 연산자가 피연산자들의 사이에 위치

후위 표기법 (postfix notation) : 연산자가 피연산자들의 뒤에 위치

 

알고리즘 설계

1. 연산자의 우선순위 설정

2. 왼쪽부터 한 글자씩 읽기

3. 열린 괄호는 push, 닫힌 괄호는 열린 괄호가 나올 때까지 pop

4. 수식을 끝까지 확인한 후 스택에 남은 연산자 모두 pop

 

 

12강 실습: 중위표현 수식 --> 후위표현 수식

⭐ 힌트 : 스택에서 꺼내지 않고 peek()를 이용해 우선순위 비교하고 isEmpty() 이용하여 모두 pop!

class ArrayStack:

    def __init__(self):
        self.data = []

    def size(self):
        return len(self.data)

    def isEmpty(self):
        return self.size() == 0

    def push(self, item):
        self.data.append(item)

    def pop(self):
        return self.data.pop()

    def peek(self):
        return self.data[-1]

prec = {
    '*': 3, '/': 3,
    '+': 2, '-': 2,
    '(': 1
}

def solution(S):
    opstack = ArrayStack()
        
    ans = ""
    
    for s in S:        
        if s == "(":
            opstack.push(s)
            
        elif s in prec:
            while not opstack.isEmpty() and prec[s] <= prec[opstack.peek()]:
                ans += opstack.pop()
            opstack.push(s)

        elif s == ")":
            while opstack.peek() != "(":
                ans += opstack.pop()
            
            opstack.pop()
            
        else:
            ans += s
            
    while not opstack.isEmpty():
        ans += opstack.pop()
        
    return ans