[프로그래머스] 코딩테스트 연습 - 36

krkorklo·2022년 2월 6일
0

프로그래머스

목록 보기
36/78

level 2 - 수식 최대화

참가자에게 주어진 연산 수식이 담긴 문자열 expression이 매개변수로 주어질 때, 우승 시 받을 수 있는 가장 큰 상금 금액을 return 하도록 solution 함수를 완성해주세요.

입출력 예시
expression : "100-200*300-500+20"
-> 60420

function solution(expression) {
    var answer = 0;
    var dict = { 1 : '*', 2 : '+', 3 : '-' };
    var prior = [[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]];
    
    var exp_num = expression.split(/[^\d]/).filter(e => e);
    var exp = expression.split(/\d/).filter(e => e);
    
    prior.forEach((pri) => {
        var tmp_num = [...exp_num];
        var tmp = [...exp];
        pri.forEach((p) => {
            while(tmp.includes(dict[p])) {
                var idx = tmp.indexOf(dict[p]);
                var n;
                if (dict[p] == "*") n = Number(tmp_num[idx]) * Number(tmp_num[idx + 1]);
                else if (dict[p] == "+") n = Number(tmp_num[idx]) + Number(tmp_num[idx + 1]);
                else n = Number(tmp_num[idx]) - Number(tmp_num[idx + 1]);
                tmp.splice(idx, 1);
                tmp_num[idx] = n;
                tmp_num.splice(idx + 1, 1);
            }
        })
        
        if (answer < Math.abs(tmp_num[0])) answer = Math.abs(tmp_num[0]);
    })
    
    return answer;
}

흐음

prior 반복에서 배열 대입할때 처음에 그냥 했다가 실패했닥
ㅎㅎ핳 왜그랬대

0개의 댓글