1935. 후위표기식2
https://www.acmicpc.net/problem/1935
📌문제
- 예제1
📝입력
5
ABC*+DE/-
1
2
3
4
5
💻출력
6.20
📌풀이
알파벳이 들어왔을 때, Stack에 push해주고 연산자를 만나면 2번 pop해서 연산을 해주면 되는데 이때 중요한 점이 2번째 pop해서 얻어온 값을 앞에 배치하여 연산해야 한다는 점이다.(코드를 보면 이해가 쉬울 것입니다.) 이 점만 파해했다면 어렵지 않게 풀 수 있는 문제이다.
132ms14628kb
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class 후위표기식2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
char[] arr = br.readLine().toCharArray();
Map<Character, Double> map = new HashMap<>();
for(char c : arr){
if( c >= 'A' && c <='Z' && !map.containsKey(c)){
map.put(c, Double.parseDouble(br.readLine()));
}
}
Stack<Double> stack = new Stack<>();
for (char c : arr) {
if ('A' <= c && c <= 'Z') stack.push(map.get(c));
else if (stack.size()>=2) {
double temp1 = stack.pop();
double temp2 = stack.pop();
switch (c) {
case '+':
stack.push(temp2 + temp1);
break;
case '-':
stack.push(temp2 - temp1);
break;
case '*':
stack.push(temp2 * temp1);
break;
case '/':
stack.push(temp2 / temp1);
break;
}
}
}
System.out.println(String.format("%.2f",stack.pop()));
}
}
'Algorithm > PTUStudy' 카테고리의 다른 글
12주차. 해시 테이블(중복 문자 없는 가장 긴 부분 문자열) (0) | 2023.04.27 |
---|---|
12주차. 해시 테이블(보석과 돌) (0) | 2023.04.27 |
11주차. 오등큰수 (0) | 2023.04.06 |
10주차. 오큰수 (0) | 2023.03.30 |
10주차. 쇠막대기 (0) | 2023.03.30 |