Level2 - 수식 최대화

손대중·2022년 5월 11일
0

문제 설명 및 링크

프로그래머스 - 거리두기 확인하기

나의 풀이

가능한 연산자 조합의 숫자가 6개로 정해져 있어서, 각 조합의 계산값을 구한 후 가장 큰 값을 리턴하면 된다.

다른 사람 풀이를 보니 대체로 다 비슷하게 푼 것 같음.

코드

모든 프로그래머스 문제 관련 코드들은 GitHub 링크 에 있음.

const calculate = (weight, expression) => {
    // 우선순위 연산자부터 계산
    weight.map(w => {
        for (let i = 1; i < expression.length - 1; i++) {
            if (expression[i] === w) {
                let num1 = Number(expression[i - 1]);
                let num2 = Number(expression[i + 1]);
                
                if (w === '*') {
                    expression.splice(i - 1, 3, num1 * num2);
                } else if (w === '+') {
                    expression.splice(i - 1, 3, num1 + num2);
                } else if (w === '-') {
                    expression.splice(i - 1, 3, num1 - num2);
                }
                i--;
            }
        }
    });
    
    return Math.abs(expression[0]);
}

function solution(expression) {
    const allWeight = [
        ['*', '+', '-'],
        ['*', '-', '+'],
        ['+', '*', '-'],
        ['+', '-', '*'],
        ['-', '*', '+'],
        ['-', '+', '*'],
    ];
    
    // expression 을 array 로 변경 
    const arrExp = expression.replace(/\*|\+|-/g, match => ` ${match} `).split(' ');
    
    // 모든 경우에 대한 계산값을 구한 후 가장 큰 값 리턴
    return Math.max(...allWeight.map(weight => calculate(weight, [...arrExp])));
}

0개의 댓글