[ 오늘의 코테 연습장 ] [ LeetCode ] 150. Evaluate Reverse Polish Notation

Mini_me·2023년 8월 31일
0

공부[코테연습장]

목록 보기
29/36
post-thumbnail

📑 문제

Reverse Polish Notation (RPN, 후위 표기법)으로 표현된 산술 식이 문자열 배열로 주어집니다.

문제의 목표는 이 산술 식을 계산하고 그 결과값을 정수 형태로 반환하는 것입니다.

  • 연산자는 항상 두 개의 숫자에 대해 작용합니다.
  • 나눗셈은 반드시 피제수가 제수보다 크거나 같아야 합니다.
  • 주어진 RPN 식은 항상 유효합니다. 즉, 모든 연산은 수행 가능하며 중간에 실패하는 경우는 없습니다.

문제 접근 방식

토큰이 연산자라면, switch - case 문을 통해, 분기처리를 했습니다.
만약 + 라면, 스택에서 두개의 원소를 pop하여 합한 후, 합계를 다시 push 합니다.
그래서 pop을 두번 하였습니다.
/ 연산자의 경우 부호때문에 추가적인 로직을 작성했습니다.
만약 현재 토큰이 숫자라면 stack에 push 합니다.

이렇게 연산자일 경우에는 스택에서 pop, push 연산을 통해 계산을 하고, 숫자일 경우에는 바로 stack에 push 하는 방식으로 구현했습니다.

📑 CODE

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();

        for(String token : tokens){
            switch(token) {
                case "+":
                    stack.push(stack.pop() + stack.pop());
                    break;
                case "-":
                    int a = stack.pop();
                    int b = stack.pop();
                    stack.push(b - a);
                    break;
                case "*":
                    stack.push(stack.pop() * stack.pop());
                    break;
                case "/":
                    a = stack.pop();
                    b = stack.pop();
                    
                   if (b < 0 || a < 0)
                       b /= a;
                   else
                       b = Math.abs(b) / Math.abs(a);
                   stack.push(b);
                   break;

                default:
                  stack.push(Integer.parseInt(token));
                  break;
            }
        }
        
        return stack.isEmpty() ? 0 : stack.peek() ; 
    }
}

0개의 댓글

관련 채용 정보