https://leetcode.com/problems/basic-calculator-ii/
Input: s = "3+2*2"
Output: 7
Input: s = " 3/2 "
Output: 1
class Solution {
public:
int calculate(string s) {
if (s.size() == 0) return 0 ;
stack<int> numStack;
int curNum = 0;
char sign = '+';
for (int i = 0; i < s.size(); ++i)
{
if (isdigit(s[i]))
{
curNum = (curNum * 10) + (s[i] - '0'); // 누적한다. 10, 100단위 등등
}
if (!isdigit(s[i]) && s[i] != ' ' || i == s.size() - 1)
{
if (sign == '+')
{
numStack.push(curNum);
}
else if (sign== '-')
{
numStack.push(-curNum);
}
else if (sign == '*')
{
int top = numStack.top();
numStack.pop();
numStack.push(top * curNum);
}
else if (sign == '/')
{
int top = numStack.top();
numStack.pop();
numStack.push(top / curNum);
}
curNum = 0;
sign = s[i];
}
}
int result = 0;
while (!numStack.empty())
{
result += numStack.top();
numStack.pop();
}
return result;
}
};
Runtime: 12 ms, faster than 72.88% of C++ online submissions for Basic Calculator II.
Memory Usage: 8.6 MB, less than 56.92% of C++ online submissions for Basic Calculator II.
45~92 까지 다양하게 나온다.