반응형
후위 표기 연산을 해주는 코드를 작성했다.
연산자를 만나면 스택에 숫자를 두 개 꺼내 연산해주고 다시 집어 넣는다.
위 과정을 반복하고 마지막으로 스택에 남아있는 수를 꺼내 포맷에 맞게 출력한다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
Stack<Double> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
char expr[] = br.readLine().toCharArray();
Double num[] = new Double[N];
for (int i = 0; i < N; i++)
num[i] = Double.parseDouble(br.readLine());
double oper1, oper2;
for (char ch : expr) {
switch (ch) {
case '+':
oper1 = stack.pop();
oper2 = stack.pop();
stack.push(oper2 + oper1);
break;
case '-':
oper1 = stack.pop();
oper2 = stack.pop();
stack.push(oper2 - oper1);
break;
case '*':
oper1 = stack.pop();
oper2 = stack.pop();
stack.push(oper2 * oper1);
break;
case '/':
oper1 = stack.pop();
oper2 = stack.pop();
stack.push(oper2 / oper1);
break;
case '%':
oper1 = stack.pop();
oper2 = stack.pop();
stack.push(oper2 % oper1);
break;
default:
stack.push(num[ch - 'A']);
}
}
System.out.printf("%.2f", stack.pop());
}
}
반응형
'Algorithm' 카테고리의 다른 글
백준 10820번 문자열 분석 [ Java ] (0) | 2021.03.29 |
---|---|
백준 1918번 후위 표기식 [ Java ] (0) | 2021.03.29 |
백준 17299번 오등큰수 [ Java ] (0) | 2021.03.28 |
백준 17298번 오큰수 [ Java ] (0) | 2021.03.28 |
백준 17413번 단어 뒤집기 2 [ Java ] (0) | 2021.03.28 |