문제
풀이
문제를 바로 이해하진 못했지만 이해만 한다면 쉽게 풀 수 있는 문제이다. 후위 표기식은 연산이 뒤에 등장하는 식으로
ABC*+ 라면 ABC*이 A?(B*C)가 된뒤에 +가 오게 되면 A+(B*C) 가되는것이다. 쉽게 말해 문자가 아닌 연산이 오게 되면 앞에 문자 2개를 연산에 의해 계산해주면 된다.
연산이 나오면 최근에 PUSH한 값을 연산해 주는 것이므로 Stack을 사용하면 쉽게 풀 수 있다.
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
String str = br.readLine();
double[] arr = new double[cnt];
Stack<Double> stack = new Stack();
for (int i = 0; i < cnt; i++) {
arr[i] = Double.parseDouble(br.readLine());
}
for (int i = 0; i < str.length(); i++) {
char temp = str.charAt(i);
if (temp >= 'A' && 'Z' >= temp) {
stack.push(arr[temp - 'A']);
} else {
if (!stack.empty()) {
double num1 = stack.pop();
double num2 = stack.pop();
switch (str.charAt(i)) {
case '*':
stack.push(num2*num1);
continue;
case '/':
stack.push(num2/num1);
continue;
case '+':
stack.push(num2+num1);
continue;
case '-':
stack.push(num2-num1);
continue;
}
}
}
}
System.out.printf("%.2f",stack.pop());
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 1912 - 연속합 (0) | 2022.06.20 |
---|---|
[Java] 백준 11053 - 가장 긴 증가하는 부분 수열 (0) | 2022.06.17 |
[Java] 백준 11726 - 2×n 타일링 (0) | 2022.06.07 |
[Java] 백준 1406-에디터 (2) | 2022.05.16 |
[Java] 백준 9093-단어 뒤집기 (0) | 2022.05.13 |