[JavaScript] 프로그래머스 수식 최대화 LEVEL2

김예진·2021년 3월 18일
0

코딩 테스트

목록 보기
41/42

문제출처

const operator = {
    '+': (a, b) => a + b,
    '-': (a, b) => a - b,
    '*': (a, b) => a * b,
};

function solution(expression) {
    let answer = 0;
    const permutation = [
        ['+', '-', '*'],
        ['+', '*', '-'],
        ['-', '+', '*'],
        ['-', '*', '+'],
        ['*', '-', '+'],
        ['*', '+', '-']
    ];
    const numArr = expression.split(/[^0-9]/).map(num => +num);
    const opArr = expression.match(/[\+\-\*]/g);
    
    for (const permu of permutation) {
        let copyNum = [...numArr];
        let copyOp = [...opArr];
        let opIdx = 0;
        
        while (true) {
            for (let i=0; i<copyOp.length; i++) {
                if (copyOp[i] === permu[opIdx]) {
                    copyNum[i] = operator[copyOp[i]](copyNum[i], copyNum[i + 1]);
                    copyNum.splice(i + 1, 1);
                    copyOp.splice(i, 1);
                    i--;
                }
            }
            opIdx++;
            
            if (copyNum.length === 1) break;
        }
        
        if (Math.abs(copyNum[0]) > answer) answer = Math.abs(copyNum[0]);
    }

    return answer;
}

풀이

  • 연산자는 3개밖에 없고 모든 경우의 수는 6개뿐이기 때문에 완전탐색으로 푼다.
  • 처음에 정규표현식으로 expression에서 숫자와 연산자를 분리해준다.
  • while문의 가장 안쪽 블럭에서 i--를 해줘야 하는게 포인트...

0개의 댓글