
😎풀이
- 스택(
stack
) 정의
- 입력된 숫자(
num
) 정의
- 입력된 부호(
sign
) 정의
- 결괏값(
result
) 정의
s
순회
5-1. 숫자인 경우 num
에 현재까지 입력된 수에 10을 곱한 다음(자릿수 재정의) 현재 수 더하기
5-2. +
기호일 경우 부호 숫자를 곱한 결과를 결괏값에 더하고 숫자는 0으로, 부호는 양수(1)로 재정의
5-3. -
기호일 경우 부호 숫자를 곱한 결과를 결괏값에 더하고 숫자는 0으로, 부호는 음수(-1)로 재정의
5-4. (
기호일 경우 현재까지의 결과 및 부호를 스택에 추가하고 결괏값과 부호 초기화
5-5. )
기호일 경우 결괏값에 현재 숫자와 부호를 곱한 값을 더하고 숫자 초기화, 이전의 부호와 결과를 적용
- 마지막 입력된 부호와 숫자를 곱한 값을 결괏값에 누산하고 반환
function calculate(s: string): number {
let stack: number[] = [];
let num = 0;
let sign = 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;
}