후위표기법을 구현하는 방법 중 스택을 사용하는 방법이 있다. 연산자를 만나는 순간 스택에 저장된 피연산자 두개를 꺼내서 연산 후 다시 피연산자로 스택에 저장하는 것을 반복하는 방법이다.
자바에서 스택의 메서드에는
등이 있다.
char 타입을 객체처럼 다루기 위해 존재하는 wrapper 클래스이다.
이 문제에서는
import java.util.Scanner;
import java.util.Stack;
public class BJ15815 {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
//후위 표기법 : 피연산자를 먼저 표시하고 연산자를 나중에 표시하는 방법
String statement = sc.next();
System.out.println(findAnswer(statement));
sc.close();
}
public static int findAnswer(String statement){
//후위 표기법 : 피연산자를 먼저 표시하고 연산자를 나중에 표시하는 방법
int answer = 0;
int i, A, B, C;
Stack<Integer> stack = new Stack<>();
for(i = 0; i < statement.length(); i++){
if(statement.charAt(i) == '+'){
B = stack.pop();
A = stack.pop();
C = A + B;
System.out.println(C);
stack.push(C);
}
else if(statement.charAt(i) == '-'){
B = stack.pop();
A = stack.pop();
C = A - B;
System.out.println(C);
stack.push(C);
}
else if(statement.charAt(i) == '*'){
B = stack.pop();
A = stack.pop();
C = A * B;
System.out.println(C);
stack.push(C);
}
else if(statement.charAt(i) == '/'){
B = stack.pop();
A = stack.pop();
C = A / B;
System.out.println(C);
stack.push(C);
}
else if(Character.isDigit(statement.charAt(i))){
stack.push(Character.getNumericValue(statement.charAt(i)));
}
else{
//사실 필요 없음...
}
}
answer = stack.pop();
return answer;
}
}