안녕하세요 !
토요일부터 일요일까지 동아리 해커톤을 진행해서 이제야 포스팅으로 찾아왔습니다.
오늘은 4주차 4번째 알고리즘인 Evaluate Reverse Polish Notation 풀이를 작성해보겠습니다.
요약
주어진 tokens
를 후위 연산한 값을 return하는 문제입니다.
진짜 처음 든 방법은 스택을 활용한 방법이었습니다.
너무나 스택을 쓰기 좋게 낸 문제라고 생각이 들었고 바로 문제를 풀어서 Accept를 받은 문제입니다.
그럼 짧고 간단하지만 아래에 풀이 작성해보겠습니다.
Stack<Integer> calculation = new Stack<>();
연산할 Stack
을 하나 선언합니다.
for (String token: tokens) {
if (token.equals("+")) {
int a = calculation.pop();
int b = calculation.pop();
calculation.push(b + a);
} else if (token.equals("-")) {
int a = calculation.pop();
int b = calculation.pop();
calculation.push(b - a);
} else if (token.equals("*")) {
int a = calculation.pop();
int b = calculation.pop();
calculation.push(b * a);
} else if (token.equals("/")) {
int a = calculation.pop();
int b = calculation.pop();
calculation.push(b / a);
} else {
calculation.push(Integer.parseInt(token));
}
}
그 후에 입력받은 tokens
를 for문으로 순회하면서 해당 token
이 연산자이면 스택에 들어있는 상위 두 값을 연산하고, 연산자가 아니라면 숫자로 형변환 후에 스택에 저장합니다.
순서가 중요한데, 두번째로 pop
한 숫자가 앞에 연산하게 되어야 후위 연산이 제대로 진행됩니다.
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> calculation = new Stack<>();
for (String token: tokens) {
if (token.equals("+")) {
int a = calculation.pop();
int b = calculation.pop();
calculation.push(b + a);
} else if (token.equals("-")) {
int a = calculation.pop();
int b = calculation.pop();
calculation.push(b - a);
} else if (token.equals("*")) {
int a = calculation.pop();
int b = calculation.pop();
calculation.push(b * a);
} else if (token.equals("/")) {
int a = calculation.pop();
int b = calculation.pop();
calculation.push(b / a);
} else {
calculation.push(Integer.parseInt(token));
}
}
return calculation.pop();
}
}
해커톤을 잘 마무리하고 몸이 급격하게 안좋아져서 잠깐 뜸했었네요..
해커톤 후기도 남겨볼까 고민중인데, 그걸 포스팅하는게 맞나 싶기도 하고요 ㅎ.ㅎ
아무튼 이번 포스팅도 읽어주셔서 감사합니다 :)