[백준] 1935번 후위 표기식2 - Java, 자바

Kim Ji Eun·2022년 1월 6일
0

문제

https://www.acmicpc.net/problem/1935

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

// 1935번 후위 표기식2
public class boj_1_1935 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());

        // 후위 표기식을 저장, 피연산자는 A부터 순서대로 N개의 영대문자만이 사용
        char[] array = br.readLine().toCharArray();

        // 후입선출의 자료구조 Stack 선언
        Stack<Double> stack = new Stack<>();

        // 키와 값으로 구성된 Map선언
        Map<Character, Double> map = new HashMap<>();

        // N의 개수만큼 피연산자에 대응되는 값을 설정
        char key = 'A';
        for (int i = 0; i < n; i++) {
            map.put(key, Double.parseDouble(br.readLine()));
            key++;
        }

        for (int i = 0; i < array.length; i++) {
            // 인덱스의 값이 a-z인경우
            if ('A' <= array[i] && array[i] <= 'Z') {
                stack.push(map.get(array[i]));
            } else {
                double answer1 = stack.pop();
                double answer2 = stack.pop();

                switch (array[i]) {
                    case '+':
                        stack.push(answer2 + answer1);
                        break;
                    case '-':
                        stack.push(answer2 - answer1);
                        break;
                    case '*':
                        stack.push(answer2 * answer1);
                        break;
                    case '/':
                        stack.push(answer2 / answer1);
                        break;
                }
            }
        }
        System.out.println(String.format("%.2f", stack.pop()));


    }
}
profile
Back-End Developer

0개의 댓글