😎풀이

  1. expression순회
    1-1. 연산자 인 경우 연산자를 기준으로 좌측과 우측을 나누어 재귀실행
    1-2. 숫자가 된 결괏값을 2중 순회하며 연산자에 맞는 결과를 result에 입력함
    1-3. 만약 연산자 없이 표현식에 숫자만 있을 경우 형변환 하여 result에 입력
  2. 입력된 result 요소 반환
function diffWaysToCompute(expression: string): number[] {
    // 결과를 저장할 배열
    const result: number[] = [];

    // 숫자와 연산자 분리
    let isNumber = true;
    for (let i = 0; i < expression.length; i++) {
        const char = expression[i];

        // 연산자가 나온 경우
        if (char === '+' || char === '-' || char === '*') {
            // 연산자를 기준으로 왼쪽과 오른쪽 부분으로 나누어 각각 계산
            const leftResults = diffWaysToCompute(expression.slice(0, i));
            const rightResults = diffWaysToCompute(expression.slice(i + 1));

            // 왼쪽과 오른쪽 각각의 결과를 계산하여 결합
            for (const left of leftResults) {
                for (const right of rightResults) {
                    if (char === '+') result.push(left + right);
                    else if (char === '-') result.push(left - right);
                    else if (char === '*') result.push(left * right);
                }
            }
        }
    }

    // 만약 숫자만 남아있다면 그대로 숫자 반환
    if (result.length === 0) {
        result.push(Number(expression));
    }

    return result;
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글