코딩테스트

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

_서리__ 2023. 5. 3. 10:27
function solution(expression) {
    //연산자의 우선순위를 자유롭게 재정의 할 수 있음. 같은 순위는 불가능! 계산된 결과가 음수 -> 절댓값으로 변환
    // 가장 큰 참가자가 우승자.
    //우승 시 가장 큰 상금금액을 리턴하세요~~~!!!
    //uh..umm...다 해볼 수 밖에 없을 것같음...
    // 같은 연산자 끼리는 앞에 있는 것이 우선순위가 높다
    var answer = 0;
    let num = '';
    let arr = []
    for(let i=0;i<expression.length;i++){
        if(expression[i]==='-'||expression[i]==='+'||expression[i]==='*'){
            arr.push(num)
            arr.push(expression[i])
            num = ''
        }else{
            num+=expression[i]
        }
    }
    arr.push(num)
    let arr1 = plus(minus(multi(arr)))
    let arr2 = plus(multi(minus(arr)))
    let arr3 = minus(plus(multi(arr)))
    let arr4 = minus(multi(plus(arr)))
    let arr5 = multi(minus(plus(arr)))
    let arr6 = multi(plus(minus(arr)))
    let answerArr = [...arr1,...arr2,...arr3,...arr4,...arr5,...arr6]
    answerArr = answerArr.map((el)=>Math.abs(el))
    return Math.max(...answerArr);
}

function plus(arr){
    let newArr = []
    let arr2 = arr.slice()
    for(let i=0;i<arr2.length;i++){
        if(arr[i]==='+'){
            newArr.pop()
            arr2[i+1] = Number(arr2[i-1])+Number(arr2[i+1])
        }else{
            newArr.push(arr2[i])
        }
    }
    return newArr;
}

function multi(arr){
    let newArr = []
    let arr2 = arr.slice()
    for(let i=0;i<arr2.length;i++){
        if(arr[i]==='*'){
            newArr.pop()
            arr2[i+1] = Number(arr2[i-1])*Number(arr2[i+1])
        }else{
            newArr.push(arr2[i])
        }
    }
    return newArr;
}

function minus(arr){
    let newArr = []
    let arr2 = arr.slice()
    for(let i=0;i<arr2.length;i++){
        if(arr[i]==='-'){
            newArr.pop()
            arr2[i+1] = Number(arr2[i-1])-Number(arr2[i+1])
        }else{
            newArr.push(arr2[i])
        }
    }
    return newArr;
}