Today Mini Learned :

기록하는 습관 들이기

ACTIVITY/모각코 (2018)

4-1 codewars

얌챠 2019. 1. 15. 18:56

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