Reverse polish notation calculator
후위표기법으로 계산하는 함수를 만드는 문제이다.ex)5 1 2 + 4 * + 3 - == 5 + ((1 + 2) * 4) - 3
입력되는 값은 공백으로 값을 구분할 수 있고 ""(아무것도 없음)일때는 0으로 계산해야 한다.유효한 연산자는 +, -, *, / 이다.예외적인 상황은 존재하지 않는다. (0으로 나누는 상황 등..)
String.split(" ")를 이용해 String을 잘라내고 String배열을 만들어 저장한다.
하나씩 꺼내며 숫자가 나오면 Stack에 저장하고 +-*/이 나오면 Stack에서 두 개를 꺼내어 계산하고 다시 넣는다.
배열에 아무것도 없을 때까지 반복한다.
String to Double ==> Double.parseDouble(String) 사용
import java.util.Stack;
public class Calc {
public double evaluate(String expr) {
double result = 0;
if(!expr.equals("")){ //String이 비었을 경우 잡아주는 역할
String[] temp = expr.split(" ");
Stack<Double> save = new Stack();
for(int i=0;i<temp.length;i++){
if(temp[i].equals("+")){
save.push(save.pop()+save.pop());
}
else if(temp[i].equals("-")){
save.push(-save.pop()+save.pop());
}
else if(temp[i].equals("*")){
save.push(save.pop()*save.pop());
}
else if(temp[i].equals("/")){
save.push(1/save.pop()*save.pop());
}
else{
save.push(Double.parseDouble(temp[i]));
} //여러가지 경우에 따라 스택에 넣고 계산하고 함
}
if(!save.empty()){
result = save.pop();
}
}
return result;
}
}
=> 통과
다른 답을 찾아봤는데 switch를 사용해서 간단하게 코드를 바꿀 수 있을 것 같다.
'ACTIVITY > 모각코 (2018)' 카테고리의 다른 글
5-오늘의 목표 (190117) (0) | 2019.01.17 |
---|---|
4-결과 (0) | 2019.01.15 |
4-오늘의 목표 (190115) (0) | 2019.01.15 |
3-결과 (0) | 2019.01.10 |
3-1 codewars (0) | 2019.01.10 |