😎풀이

  1. 스택 정의
  2. 숫자 정의
  3. 이전 연산자 정의
  4. s 순회
    4-1. 숫자라면 자릿수에 맞게 누적
    4-2. 문자면서 공백이 아니라면 연산자이므로 각 기호에 맞게 처리 후 스택에 입력 후 숫자만 연산자 및 숫자 업데이트
  5. 스택에 입력된 숫자 누산 및 반환
function calculate(s: string): number {
    let stack: number[] = [];
    let num = 0;
    let prevOp = '+';
    
    for (let i = 0; i < s.length; i++) {
        const char = s[i];

        if (char >= '0' && char <= '9') {
            num = num * 10 + Number(char); // 숫자 누적
        }

        if ((char < '0' && char !== ' ') || i === s.length - 1) {
            // 연산자를 만났거나 마지막 숫자인 경우
            if (prevOp === '+') {
                stack.push(num);
            } else if (prevOp === '-') {
                stack.push(-num);
            } else if (prevOp === '*') {
                stack.push(stack.pop()! * num);
            } else if (prevOp === '/') {
                stack.push(Math.trunc(stack.pop()! / num)); // 정수 나눗셈
            }
            prevOp = char; // 연산자 업데이트
            num = 0; // 숫자 초기화
        }
    }
    
    return stack.reduce((acc, val) => acc + val, 0); // 스택 값 합산
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글