백준 1935 java : stack과 후위표기식

magicdrill·2024년 11월 11일
0

백준 문제풀이

목록 보기
484/654

백준 1935 java : stack과 후위표기식

java에서 스택을 사용하는 방법과 항상 놓치던 printf로 소숫점 아래 출력하는 방법을 연습했다.

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

public class bj1935 {
        static Scanner scanner = new Scanner(System.in);
        static String statement;
        static Vector<Double> value = new Vector<>();

    public static void main(String[] args) {
        //후위 표기식을 구현하기 위해 스택을 사용해본다.
        inputStatement();
        System.out.printf("%.2f", findAnswer());

        scanner.close();
    }

    public static void inputStatement(){
        System.out.println("inputStatement()");
        int i;
        int n;
        double v;

        n = scanner.nextInt();
        statement = scanner.next();
        for(i = 0; i < n; i++){
            v = scanner.nextDouble();
            value.add(v);
        }
    }

    public static double findAnswer(){
        System.out.println("findAnswer()");
        double answer = 0.0;
        Stack<Double> stack = new Stack<>();
        int i;
        char ch;
        double num;

        for(i = 0; i < statement.length(); i++){
            ch = statement.charAt(i);

            if(Character.isLetter(ch)){
                num = value.get(ch - 'A');
                stack.push(num);
            }
            else{
                double num2 = stack.pop();
                double num1 = stack.pop();
                switch (ch){
                    case '+':
                        stack.push(num1 + num2);
                        System.out.println(num1 + " + " + num2 + " = " + stack.peek());
                        break;
                    case '-':
                        stack.push(num1 - num2);
                        System.out.println(num1 + " - " + num2 + " = " + stack.peek());
                        break;
                    case '*':
                        stack.push(num1 * num2);
                        System.out.println(num1 + " * " + num2 + " = " + stack.peek());
                        break;
                    case '/':
                        stack.push(num1 / num2);
                        System.out.println(num1 + " / " + num2 + " = " + stack.peek());
                        break;
                }
            }
        }
        answer = stack.pop();

        return answer;
    }
}

0개의 댓글