백준|1918번|후위 표기식

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
88/136

문제설명
일상적으로 사용하는 중위 표기식을 입력받고 그 식을 후위 표기식으로 변환하여 출력하는 문제입니다.

작동 순서
1. 중위 표기식을 입력받습니다.
2. 앞글자부터 확인해가며 해당 글자가 피연산자일 경우 출력합니다.
3. 해당 글자가 "("일 경우 연산자 스택에 추가해줍니다.
4. 해당 글자가 ")"인 경우 그 괄호의 시작점 "("가 나올때까지 연산자들을 출력합니다.
5. 해당 글자가 "+"나 "-"인 경우 "("를 만날 때까지 연산자를 출력하고 "("가 나온경우 그 "("를 다시 연산자 스택에 추가합니다. 그 후 연산자 스택에 해당 연산자를 추가합니다.
6. 해당 글자가 ""나 "/"인 경우 가장 최근의 연산자가 ""나 "/"이면 그 연산자를 출력하고 그렇지 않은 경우 그냥 넘어갑니다. 또한 해당 연산자를 연산자 스택에 추가합니다.
7. 탐색이 모두 끝나면 연산자 스택에 남아있는 연산자들을 모두 출력합니다.

소스코드

import sys
from collections import deque
expression = sys.stdin.readline().strip()
stack = deque()
for i in range(len(expression)):
    if expression[i] == "(":
        stack.append(expression[i])
    elif expression[i] == ")":
        while stack:
            char = stack.pop()
            if char == "(":
                break
            else:
                print(char, end="")
    elif expression[i] == "+" or expression[i] == "-":
        while stack:
            char = stack.pop()
            if char == "(":
                stack.append("(")
                break
            else:
                print(char, end="")
        stack.append(expression[i])
    elif expression[i] == "*" or expression[i] == "/":
        if stack:
            if stack[-1] == "*" or stack[-1] == "/":
                print(stack.pop(), end="")
        stack.append(expression[i])
    else:
        print(expression[i], end="")
while stack:
    print(stack.pop(), end="")
profile
INTP 개발자 지망생

0개의 댓글