java에서 스택을 사용하는 방법과 항상 놓치던 printf로 소숫점 아래 출력하는 방법을 연습했다.
import java.util.Scanner;
import java.util.Stack;
import java.util.Vector;
public class bj1935 {
static Scanner scanner = new Scanner(System.in);
static String statement;
static Vector<Double> value = new Vector<>();
public static void main(String[] args) {
//후위 표기식을 구현하기 위해 스택을 사용해본다.
inputStatement();
System.out.printf("%.2f", findAnswer());
scanner.close();
}
public static void inputStatement(){
System.out.println("inputStatement()");
int i;
int n;
double v;
n = scanner.nextInt();
statement = scanner.next();
for(i = 0; i < n; i++){
v = scanner.nextDouble();
value.add(v);
}
}
public static double findAnswer(){
System.out.println("findAnswer()");
double answer = 0.0;
Stack<Double> stack = new Stack<>();
int i;
char ch;
double num;
for(i = 0; i < statement.length(); i++){
ch = statement.charAt(i);
if(Character.isLetter(ch)){
num = value.get(ch - 'A');
stack.push(num);
}
else{
double num2 = stack.pop();
double num1 = stack.pop();
switch (ch){
case '+':
stack.push(num1 + num2);
System.out.println(num1 + " + " + num2 + " = " + stack.peek());
break;
case '-':
stack.push(num1 - num2);
System.out.println(num1 + " - " + num2 + " = " + stack.peek());
break;
case '*':
stack.push(num1 * num2);
System.out.println(num1 + " * " + num2 + " = " + stack.peek());
break;
case '/':
stack.push(num1 / num2);
System.out.println(num1 + " / " + num2 + " = " + stack.peek());
break;
}
}
}
answer = stack.pop();
return answer;
}
}