<Hard> Basic Calculator (LeetCode : C#)

이도희·2023년 6월 9일
0

알고리즘 문제 풀이

목록 보기
104/185

https://leetcode.com/problems/basic-calculator/

📕 문제 설명

문자열 s가 주어질 때 계산하여 결과 반환
(문자열 s는 '+', '-', '(', ')', ' '로 이루어져있다.)

+) '+'는 연산자의 역할로만 사용되지 양수 자체를 표현할 때 사용되지 않는다.

  • Input
  • Output

예제

풀이

+,-는 부호 업데이트를 하고, ( 일때는 ) 만날때까지 연산을 진행한다. 숫자의 경우 그대로 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;
    }
}

결과

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글