Study/개발일지

[백엔드TIL] 후위식 연산

아이바 2023. 10. 4. 10:54

 후위식 연산

👻 문제

🐱‍🐉 후위 표기법이란?

  • 11+, 22+ , 33+

중위 표기식과는 다르게 후위 표기식은 연산자가 뒤에 위치한다. 이렇게 표기하는 방법을 후위 표기법이라고 한다. 연산자가 '뒤(후)'에 위치 하기 때문에 후위 표기법이라고 한다. 이러한 연산은 컴퓨터가 연산을 하기 쉽게 표현하는 방법이다.

🐱‍🐉 후위 표기법의 예시

4 7 * = 28
4 7 2 + * = 4 * (7+ 2) = 36
4 7 * 20 - = (4* 7) - 20 = 8
3 4 7 * 2 / + = 3 + ((4 * 7 ) / 2 ) = 17

👻 풀이

🐱‍🐉 후위 표기법의 과정(Stack)

  1. 입력값을 읽어들인 후, 숫자가 나오면 stack에 push한다.
  2. 연산자가 나올 경우, 연산자 앞의 2개의 숫자를 계산한다.
  3. 계산한 결과 값을 stack에 push한다.

  1. 연산자를 만나면 stack.pop()을 통해 2개를 빼낸 후, 계산한다.
  2. 위와 같은 방법을 통해 입력값이 없을 때 까지 반복한다.

👻 소스코드

package algolecture;
import java.util.Scanner;
import java.util.Stack;

public class Main39 {
    public int solution(String str){
        int answer = 0;

        Stack<Integer> stack = new Stack<>();
        for(char x : str.toCharArray()){
            int number = (int) x;
            if(number>=48 && number<=57)
                stack.push(number - 48);
            else{
                int rt = stack.pop();
                int lt = stack.pop();
                if(x == '+')
                    stack.push(lt+rt);
                else if(x=='/')
                    stack.push(lt/rt);
                else if (x == '*')
                    stack.push(lt*rt);
                else if(x == '-')
                    stack.push(lt-rt);
            }
        }

        answer = stack.get(0);


        return answer;
    }

    public static void main(String[] args) {
        Main39 T = new Main39();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(T.solution(str));
    }
}
728x90