<5.4> 후위연산

mutexlocking·2022년 10월 28일
0

일단 코드 먼저 ...

import java.util.Scanner;
import java.util.Stack;

public class Main {

    // 여기서 먼저 pop된 숫자가 num2라는 점을 주의해야 함!
    public static int calculate(int num2, int num1, char op){

        switch (op){

            case '+':
                return num1 + num2;

            case '-':
                return num1 - num2;

            case '*':
                return num1 * num2;

            case '/':
                return num1 / num2;

        }

        return 0;
    }

    public static int solution(int[] args){

        Stack<Integer> stack = new Stack<>();
        Stack<Integer> tmpStack = new Stack<>();

        //1. 일단 역순으로 정렬한 char 배열의 각 char를 Stack에 넣는다
        for(int n : args){
            stack.push(n);
        }

        //2. 후위연산자 계산 법대로 stack에 넣고 빼내기를 반복
        while(!stack.isEmpty()){
            Integer pop = stack.pop();

            if(pop>=1 && pop<=9){
                tmpStack.push(pop);
            } else{
                int tmpResult = calculate(tmpStack.pop(), tmpStack.pop(), (char)(pop + '0'));
                tmpStack.push(tmpResult);
            }
        }

        return tmpStack.pop();
    }

    public static void main(String[] args){

        //0. Scanner 준비
        Scanner sc = new Scanner(System.in);

        //1. 입력
        String str = sc.nextLine();
        char[] charArr = new StringBuilder(str).reverse().toString().toCharArray();
        int[] arr = new int[charArr.length];
        for(int i=0; i<charArr.length; i++){
            arr[i] = charArr[i] - '0';
        }

        //2. solution() 호출 후 결과 반환
        int result = solution(arr);

        //3. 결과 출력
        System.out.println(result);
    }
}
profile
개발자가 되고자 try 하는중

0개의 댓글