https://www.acmicpc.net/problem/1935
📝문제
📝풀이
후위 표기식 문제는 항상 stack을 이용한다.
1. 연산자 => stack 에서 2개 꺼낸 피 연산자를 연산 후 stack에 결과 값을 push
2. 피연산자 => stack 에 push
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int operandCount = Integer.parseInt(br.readLine());
HashMap<Character, Double> operands = new HashMap<>();
Stack<Double> stack = new Stack<>();
char[] equations = br.readLine().toCharArray();
for(int i=0;i<operandCount;i++){
double value = Double.parseDouble(br.readLine());
operands.put((char) ('A'+i),value);
} // end input
for (char ch : equations) {
if(!isOperator(ch)){ // 연산자인경우
stack.push(operands.get(ch));
}else { // 피 연산자인 경우
Double op1 = stack.pop();
Double op2 = stack.pop();
Double result = switch (ch) {
case '+' -> op2 + op1;
case '-' -> op2 - op1;
case '/' -> op2 / op1;
case '*' -> op2 * op1;
default -> 0.00;
};
stack.push(result);
}
}
System.out.printf("%.2f",stack.pop());
}
static boolean isOperator(char ch){
return ch<'A'||ch>'Z';
}
}
'알고리즘,PS > 백준' 카테고리의 다른 글
[BOJ] 백준 [10844] 쉬운계단수JAVA (0) | 2022.05.11 |
---|---|
[BOJ] 백준 [3085] 사탕게임 JAVA (0) | 2022.05.06 |
[BOJ] 백준 [17413] 단어뒤집기2 JAVA (0) | 2022.05.05 |
[BOJ] 백준 [12100] 2048(Easy) JAVA (0) | 2022.04.28 |
[BOJ] 백준 [16198] 에너지 모으기JAVA (0) | 2022.04.27 |