https://leetcode.com/problems/evaluate-reverse-polish-notation/
- 연산자 기준으로 연산이 이뤄진다.
- 연산자와 앞 두개의 숫자가 연산에 참여한다.
- 그 결과와 직전 숫자가 다음 연산자와 연산을 이룬다.
🤨 Stack 을 이용해 숫자를 저장하자
for(int i=0, 배열 끝까지){
if(배열[i]가 숫자){
stack.push(배열[i])
}else if(배열[i]가 +-*/){
결과 = stack.pop() +-*/ stack.pop()
stack.push(결과)
}
}
stack.pop()
public int evalRPN(String[] tokens) {
Stack<Integer> st2 = new Stack<>();
for(String s : tokens){
if(s.equals("+") || s.equals("*") || s.equals("/") || s.equals("-")){
int b = st2.pop();
int a = st2.pop();
int res = cal(a, b, s.charAt(0));
st2.push(res);
} else {
st2.push(Integer.parseInt(s));
}
}
return st2.pop();
}
private int cal(int a, int b, char oprtr){
if(oprtr == '+'){
return a + b;
} else if(oprtr == '-'){
return a - b;
} else if(oprtr == '*'){
return a * b;
} else {
return a / b;
}
}
연산하는 부분을 따로 메서드로 추출해서 한 눈에 이해할 수 있었다.
나도 코드를 짤 때 이런 부분을 꼭 고려해야 해서 가독성을 높여야 할 것 같다.
이번에도 Stack이라는 자료구조가 java 기본 lang에 있는지 몰랐어서 한 번 사용해보고 싶다.