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.Stack;
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 str = br.readLine();
HashMap<Character, Integer> map = new HashMap<>();
char ch = 'A';
for(int i=0; i<n; i++){
map.put(ch++, Integer.parseInt(br.readLine()));
}
Stack<Double> stack = new Stack<>();
for(int i=0; i<str.length(); i++){
char val = str.charAt(i);
if(Character.isLetter(val)){ // 알파벳이면 해당하는 숫자를 스택에 추가
stack.push((double)map.get(val));
}
else{ // 연산자일 경우 스택에서 숫자 두개 꺼내 계산
double r = stack.pop();
double l = stack.pop();
switch(val){
case '+':
stack.push(l+r);
break;
case '-':
stack.push(l-r);
break;
case '*':
stack.push(l*r);
break;
case '/':
stack.push(l/r);
break;
}
}
}
System.out.println(String.format("%.2f", stack.pop()));
}
}
해시맵을 사용해 피연산자인 알파벳을 키로, 알파벳에 해당하는 숫자를 값으로 저장한다.
문자열을 돌며 알파벳이면 스택에 저장하고, 연산자이면 스택에서 위에 있는 두개의 숫자를 pop해 연산한 후 다시 push한다.
이렇게 연산을 진행하고 스택에 마지막에 남아있는 값이 정답이다.
'ALGORITHM' 카테고리의 다른 글
[JAVA] 백준 2675번- 문자열 반복 (0) | 2022.07.20 |
---|---|
[JAVA] 백준 11899번- 괄호 끼워넣기 (0) | 2022.07.20 |
[JAVA] 백준 10809번- 알파벳 찾기 (0) | 2022.07.18 |
[JAVA] 백준 18258번- 큐2 (0) | 2022.07.18 |
[JAVA] 백준 20920번- 영단어 암기는 괴로워 (0) | 2022.07.17 |