bong-u/til

백준 - 1918 : 후위 표기식 (G2)

수정일 : 2024-11-15

 1string = list(input())
 2
 3priority = {'(':0, ')':0, '+':1, '-':1, '*':2, '/':2}
 4operator = []
 5result = ''
 6
 7for c in string:
 8    if c.isalpha():
 9        result += c
10    elif c == '(':
11        operator.append(c)
12    elif c == ')':
13        while operator:
14            op = operator.pop()
15            if op == '(':
16                break
17            result += op
18    else:
19        if operator:
20            if priority[operator[-1]] < priority[c]:
21                operator.append(c)
22            else:
23                while operator and priority[operator[-1]] >= priority[c]:
24                    result += operator.pop()
25                operator.append(c)
26        else:
27            operator.append(c)
28while operator:
29    result += operator.pop()
30
31print (result)

문제

  • 중위 표기법으로 입력된 수식을 후위 표기법으로 변환하는 문제이다.
  • 예제
    • 입력 : A+B*C-D/E
    • 출력 : ABC*+DE/-

해결방법

  • 입력받은 문자열을 리스트에 담긴 문자별로 순회한다.
  1. 해당 문자가 알파벳인 경우 : 바로 결과 문자열에 더한다
  2. 해당 문자가 여는 괄호인 경우 : stack에 push한다
  3. 해당 문자가 닫는 괄호인 경우 : 여는 괄호가 나올때까지 stack을 pop한다
  4. 해당 문자가 연산자인 경우 (+, -, *, /)
    • 스택의 top에 있는 연산자와 우선순위를 비교하여 추가하는데,
    • top에 있는 연산자의 우선순위가 해당 연산자보다 작을때까지 pop한다
  • 스택의 남은 연산자를 추가하여 결과값을 출력한다.