문제
You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation.
Evaluate the expression. Return an integer that represents the value of the expression.
Note that:
The valid operators are '+', '-', '*', and '/'.Each operand may be an integer or another expression.The division between two integers always truncates toward zero.There will not be any division by zero.The input represents a valid arithmetic expression in a reverse polish notation.The answer and all the intermediate calculations can be represented in a 32-bit integer.
Example 1:
Input: tokens = ["2","1","+","3","*"] Output: 9 Explanation: ((2 + 1) * 3) = 9
Example 2:
Input: tokens = ["4","13","5","/","+"] Output: 6 Explanation: (4 + (13 / 5)) = 6
Example 3:
Input: tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"] Output: 22 Explanation: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5 = ((10 * (6 / (12 * -11))) + 17) + 5 = ((10 * (6 / -132)) + 17) + 5 = ((10 * 0) + 17) + 5 = (0 + 17) + 5 = 17 + 5 = 22
Constraints:
1 <= tokens.length <= 10^4
tokens[i] is either an operator: "+", "-", "*", or "/", or an integer in the range [-200, 200].
문제접근
1. 연산 기호를 set에 저장한다.
2. tokens의 값이 정수이면 push, 연산 기호이면 stack의 수를 pop하여 순서에 맞게 연산한다.
문제풀이
import java.util.*;
class Solution {
public int evalRPN(String[] tokens) {
Stack<String> stack = new Stack();
Set<String> hs = new HashSet();
hs.add("+");
hs.add("-");
hs.add("*");
hs.add("/");
int result = 0;
int a = 0;
int b = 0;
String s = "";
boolean isFirst = true;
for(int i = 0 ; i < tokens.length; i++){
s = tokens[i];
if(isFirst){
result = Integer.parseInt(s);
isFirst = false;
}
if(!hs.contains(s)){
stack.add(s);
}else{
a = Integer.parseInt(stack.pop());
b = Integer.parseInt(stack.pop());
if(s.equals("+"))
result = b + a;
else if(s.equals("-"))
result = b - a;
else if(s.equals("*"))
result = b*a;
else if(s.equals("/"))
result = b/a;
stack.push(result+"");
}
}
return result;
}
}
'원티드 프리온보딩 - BE > 과제 정리' 카테고리의 다른 글
[HashTable] 219. Contains Duplicate II (480) | 2023.08.30 |
---|---|
[HashTable] 1. Two Sum (476) | 2023.08.30 |
[Stack] 155. MinStack (464) | 2023.08.30 |
[LinkedList] 2. Add Two numbers (619) | 2023.08.29 |
[LinkedList] 141. Linked List Cycle (500) | 2023.08.29 |