[알고리즘]/백준

백준 1935 자바 - 후위표기식2

broship 2021. 6. 22. 08:24

문제


 

 

 

문제해결


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

public class B1935 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        String input = sc.nextLine();
        double[] nums = new double[n];
        for (int i = 0; i < n; i++) {
            nums[i] = sc.nextInt();
        }

        Stack<Double> stack = new Stack<>();
        int idx = 0;
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            // 피연산자일경우 스텍에 저장
            // 연산자일경우 2개씩 꺼내서 계산후 다시 스텍에 저장
            if (c>=65 && c<=90){
                stack.push(nums[c-'A']);//인덱스를 A,B,C... 순으로 꺼내는 방법
            } else if (c=='*'){
                stack.push(stack.pop()*stack.pop());
            } else if (c=='/'){
                Double tmp = stack.pop();
                stack.push(stack.pop()/tmp);
            } else if (c=='+'){
                stack.push(stack.pop()+stack.pop());
            } else if (c=='-'){
                Double tmp = stack.pop();
                stack.push(stack.pop()-tmp);
            }
        }
        //스텍 맨 위에가 결과가 된다
        System.out.printf("%.2f", stack.peek());
    }
}

- 피연산자를 담을 double 배열을 만든 후 nums[c-'A'] 방식을 사용하면 대문자를 인덱스처럼 활용해서 배열에서 꺼내올 수 있다

- input을 하나씩 돌면서 피연산자일 경우 스텍에 담고 연산자일 경우 스텍에서 2개씩 꺼내서 연산 처리 후 다시 스텍에 넣는다

- 스텍에 남아있는 숫자가 최종 결과가 된다

'[알고리즘] > 백준' 카테고리의 다른 글

백준 10808 자바 - 알파벳 개수  (0) 2021.06.24
백준 1918 자바 - 후위표기식  (0) 2021.06.23
백준 17299 자바 - 오등큰수  (0) 2021.06.21
백준 17298 자바 - 오큰수  (0) 2021.06.20
백준 10799 자바 - 쇠막대기  (0) 2021.06.19