😎풀이

  1. 스택(stack) 정의
  2. 입력된 숫자(num) 정의
  3. 입력된 부호(sign) 정의
  4. 결괏값(result) 정의
  5. s 순회
    5-1. 숫자인 경우 num에 현재까지 입력된 수에 10을 곱한 다음(자릿수 재정의) 현재 수 더하기
    5-2. + 기호일 경우 부호 숫자를 곱한 결과를 결괏값에 더하고 숫자는 0으로, 부호는 양수(1)로 재정의
    5-3. - 기호일 경우 부호
    숫자를 곱한 결과를 결괏값에 더하고 숫자는 0으로, 부호는 음수(-1)로 재정의
    5-4. ( 기호일 경우 현재까지의 결과 및 부호를 스택에 추가하고 결괏값과 부호 초기화
    5-5. ) 기호일 경우 결괏값에 현재 숫자와 부호를 곱한 값을 더하고 숫자 초기화, 이전의 부호와 결과를 적용
  6. 마지막 입력된 부호와 숫자를 곱한 값을 결괏값에 누산하고 반환
function calculate(s: string): number {
    let stack: number[] = [];
    let num = 0;
    let sign = 1; // 현재 숫자의 부호 (+1 또는 -1)
    let result = 0;
    
    for (const char of s) {
        if (char >= '0' && char <= '9') {
            num = num * 10 + parseInt(char);
        } else if (char === '+') {
            result += sign * num;
            num = 0;
            sign = 1;
        } else if (char === '-') {
            result += sign * num;
            num = 0;
            sign = -1;
        } else if (char === '(') {
            stack.push(result);
            stack.push(sign);
            result = 0;
            sign = 1;
        } else if (char === ')') {
            result += sign * num;
            num = 0;
            result *= stack.pop()!; // 이전 부호 적용
            result += stack.pop()!; // 이전 결과 적용
        }
    }
    
    return result + sign * num;
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글