1.문제
LeetCode - The World's Leading Online Programming Learning Platform
2.문제설명
이 문제는 후위표기를 계산 하게 하는 문제이다.

3.소스코드
public class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
String op = "+-*/";
for (String token : tokens) {
if (op.contains(token)) {
int b = stack.pop();
int a = stack.pop();
int result = performOperation(a, b, token);
stack.push(result);
} else {
stack.push(Integer.parseInt(token));
}
}
return stack.pop();
}
private int performOperation(int a, int b, String operator) {
switch (operator) {
case "+":
return a + b;
case "-":
return a - b;
case "*":
return a * b;
case "/":
return a / b;
}
return 0;
}
}
4.소스코드해설
후위 연산 표기를 하기 위해서는 "+ - * / " 를 구별하고 stack 에 쌓아가면서 들어온 연산자를 통해 계산을 해주는 방식이 필요하다.
들어온 문자열을 순회 하면서 들어온 문자열이 연산자이면 순회하면서 쌓아 두었던 stack 두개를 꺼내어 연산을 해준뒤 다시 push 후 순회하면 된다.
5.회고
첫 번째 시도

첫 번째 시도는 주먹구구식으로 조건을 따져서 stack에 push / pop 하면서 계산 하는 식으로 구현 하였다. 하지만 속도 측면에서는 나름 평균수준을 보였지만 메모리 측면에서는 나쁜 모습을 보여주어 개선을 시도해 보았다.
두번 째 시도는 연산자를 분리하는 if-else 문을 줄이는 메서드를 구현 하여 분리하는것이였다.

하지만.. 속도는 느려지고 메모리상태는 그대로이다.. 애초에 메서드로 분리해봤자 비슷한 결과를 가져올것 이라는 생각이 들어 if-else 에 계산하는 연산자를 거치는 if -else (or ) 문을 줄여 보는 시도를 해보았다.
세번쨰 시도

세번째 시도는 성공 적이였다. String op 라는 계산 연산자를 두어 if 조건에 을 줄여주고 계산 하는 방식이 메모리와 속도 측면에서 더 좋다는 것을 확인하게 되었다.