https://leetcode.com/problems/basic-calculator/
문자열 s가 주어질 때 계산하여 결과 반환
(문자열 s는 '+', '-', '(', ')', ' '로 이루어져있다.)
+) '+'는 연산자의 역할로만 사용되지 양수 자체를 표현할 때 사용되지 않는다.
+,-는 부호 업데이트를 하고, ( 일때는 ) 만날때까지 연산을 진행한다. 숫자의 경우 그대로 sign을 고려했기 때문에 숫자인 부분까지 result에 더해주면 된다.
public class Solution {
public int Calculate(string s) {
int i = 0;
return EvaluateExpression(s, ref i);
}
private int EvaluateExpression(string s, ref int i) {
int result = 0;
int sign = 1;
while (i < s.Length)
{
char c = s[i];
if (c == '+') sign = 1;
else if (c == '-') sign = -1;
else if (c == '(')
{
i++;
int value = EvaluateExpression(s, ref i); // 괄호 열린 부분부터 닫힌부분까지 계산
result += sign * value;
}
else if (c == ')') break; // 괄호 닫힌부분 만나면 return 위해 break
else if (char.IsDigit(c))
{
int num = c - '0';
while (i+1 < s.Length && char.IsDigit(s[i+1])) // 숫자인 곳 까지 돌기
{
i++;
num = num * 10 + (s[i] - '0'); // 숫자 자릿수 고려
}
result += sign * num; // 계산에 포함시킴
}
i++;
}
return result;
}
}