[LeetCode] 150. Evaluate Reverse Polish Notation

lkdcode·2023년 8월 31일

Algorithm

목록 보기
20/47
post-thumbnail

150. Evaluate Reverse Polish Notation


문제 분석

주어지는 문자열 배열에 사칙연산과 숫자가 있다.
사칙연산이 등장하는 시점으로부터 앞의 2개의 숫자를 우선순위로 계산하여 정답을 리턴하는 문제


풀이 과정

문제 분석에서 이미 스택을 이용한 풀이를 유추할 수 있다.

사칙연산("+", "-", "/", "*") 이 등장하는 시점을 체크한다.
만약 등장했다면, 스택에서 2개의 숫자를 꺼내서 계산해주고
다시 스택에 넣는다.

위의 로직으로 문제를 해결할 수 있다.


나의 생각

스택이 가지고 있는 특성인 '후입선출'을 이용하면 사칙연산의 우선순위를 쉽게 적용할 수 있다.


코드

    public int evalRPN(String[] tokens) {
        Stack<String> stack = new Stack<>();
        int firstNumber = 0;
        int secondNumber = 0;

        for (String token : tokens) {
            switch (token) {
                case "+":
                    secondNumber = Integer.parseInt(stack.pop());
                    firstNumber = Integer.parseInt(stack.pop());
                    stack.push(String.valueOf(firstNumber + secondNumber));
                    break;
                case "-":
                    secondNumber = Integer.parseInt(stack.pop());
                    firstNumber = Integer.parseInt(stack.pop());
                    stack.push(String.valueOf(firstNumber - secondNumber));
                    break;
                case "/":
                    secondNumber = Integer.parseInt(stack.pop());
                    firstNumber = Integer.parseInt(stack.pop());
                    stack.push(String.valueOf(firstNumber / secondNumber));
                    break;
                case "*":
                    secondNumber = Integer.parseInt(stack.pop());
                    firstNumber = Integer.parseInt(stack.pop());
                    stack.push(String.valueOf(firstNumber * secondNumber));
                    break;
                default:
                    stack.push(token);
            }
        }

        return Integer.parseInt(stack.pop());
    }

profile
되면 한다

0개의 댓글