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

jinvicky·2024년 4월 13일
0

ALG

목록 보기
26/62
post-thumbnail
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        String expr = br.readLine(); // 수식을 받아서 저장

        List<Double> numberList = new ArrayList<>();

        for(int i = 0; i < N; i++) {
            Double num = Double.parseDouble(br.readLine());
            numberList.add(num);
            // 숫자를 큐에 저장
        }

        Stack<Double> numberStack = new Stack<>(); // 연산자와 숫자의 계산 결과를 담는 스택

        for (int i = 0; i < expr.length(); i++) {
            char ch = expr.charAt(i);

            if (ch >= 'A' && ch <= 'Z') { // 알파벳이라면
                numberStack.push(numberList.get(ch - 'A'));
            } else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {
                // 연산자라면
                double num1 = numberStack.pop();
                double num2 = numberStack.pop();

                // 큐에서 숫자를 두개 꺼내서
                switch (ch) {
                    case '+':
                        numberStack.add(num2 + num1);
                        break;
                    case '-':
                        numberStack.add(num2 - num1);
                        break;
                    case '*':
                        numberStack.add(num2 * num1);
                        break;
                    case '/':
                        numberStack.add(num2 / num1);
                        break;
                }
            }
        }
        System.out.printf("%.2f", numberStack.pop());
//        System.out.println(numberStack.peek());
    }
}

결과
결과는 동일한데 틀렸다가, 답보고 제출했다가 몇 달 지나서 까먹은 채로 재도전해서
로직 맞추고, println() 형식만 틀림.

System.out.printf("%.2f", numberStack.pop());

문제가 소수점 2번째 자리까지 출력이라서 위처럼 표시를 해야 한다.

난항이었던 부분은 AA+A+ 처럼 같은 숫자로 여러번 연산을 하는 경우였다.
그러니까 알파벳의 종류만큼 숫자의 종류가 결정이 되니 그걸 List에 담았다가
문자에서 - 'A'를 뺀 값을 인덱스로 써서 값을 불러와야 한다.
A면 0, B면 1... 이런 식으로 값이 나온다.

ABCDE 순으로 알파벳이 순서대로 나온다는 가정 하에 의미가 있다고 생각함.

profile
일단 쓰고 본다

0개의 댓글