흰 스타렉스에서 내가 내리지

[BOJ] 1918 후위표현식 본문

Problem Solving

[BOJ] 1918 후위표현식

주씨. 2024. 5. 14. 02:42
728x90

면접에서 나올수도 있을까?

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

 

 

  • 알파벳이면 바로 정답에 포함
  • 여는 괄호이면 스택에 넣음
  • 닫는 괄호이면 여는 괄호가 나올때까지 스택 팝해서 여는 스택에 넣음. 
    • 이 때, 마지막으로 여는 괄호를 pop
  • +, - 일 경우, 현재 스택에서  +,-,*,/  를 모두 정답에 넣음
  • *, / 일 경우, 현재 스택에서 *, / 만 정답에 넣음
  • 스택 남은거 다 정답에 넣음 

 

expression = input()

stack = []
answer = ''

for char in expression:
    if char.isalpha():      # 알파벳일 경우 바로 정답에 넣는다
        answer += char

    elif char == '(':       # 여는 괄호일 경우 스택에 넣는다
        stack.append(char)

    elif char == ')':       # 닫는 괄호일 경우 여는 괄호가 나올 때까지 정답에 넣는다.
        while stack and stack[-1] != '(':
            answer += stack.pop()
        stack.pop()         # 여는 괄호를 제거한다.

    elif char in ['+', '-']:    # 덧셈 뺄셈일 경우, 덧셈, 뺄셈, 곱셈, 나눗셈을 모두 정답에 넣는다.
        while stack and stack[-1] in ['+', '-', '*', '/']:
            answer += stack.pop()
        stack.append(char)

    elif char in ['*', '/']:    # 곱셈, 나눗셈일 경우, 곱셈과 나눗셈일 때만 넣는다.
        while stack and stack[-1] in ['*', '/']:
            answer += stack.pop()
        stack.append(char)

while stack:
    answer += stack.pop()

print(answer)