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

이은빈 EUNBIN·2021년 5월 3일
0
post-thumbnail

📌 문제

https://programmers.co.kr/learn/courses/30/lessons/67257



📌 풀이

function solution(expression) {
    let answer = [];
    const cases = [
        ['-', '*', '+'],
        ['-', '+', '*'],
        ['*', '-', '+'],
        ['*', '+', '-'],
        ['+', '-', '*'],
        ['+', '*', '-']
    ];
    
    for(let i = 0; i < cases.length; i++) {
        let arr = expression.split(/(\D)/);
        for(let j = 0; j < 3; j++) {
            while(arr.includes(cases[i][j])) {
                let index = arr.indexOf(cases[i][j]);
                arr.splice(index-1, 3, (new Function(`return ${arr.slice(index-1, index+2).join('')}`))());
              // index-1 인덱스에서 3개 삭제 후 new Function 반환값 추가
            }
        }
        answer.push(arr);
    }
    
    return Math.max(...answer.map(num => Math.abs(num)));
}

new Function ([arg1[, arg2[, ...argN]],] functionBody)
JavaScript Function


Function 생성자와 함수 선언의 차이

var x = 10;

function createFunction1() {
    var x = 20;
    return new Function('return x;'); // 여기서 |x|는 전역 범위에 있는 |x|를 참조함.
}

function createFunction2() {
    var x = 20;
    function f() {
        return x; // 여기서 |x|는 위의 지역에 있는 |x|를 참조함.
    }
    return f;
}

var f1 = createFunction1();
console.log(f1());          // 10
var f2 = createFunction2();
console.log(f2());          // 20
profile
Frontend Engineer & Value Creator

0개의 댓글