Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

PS/프로그래머스

[프로그래머스][브루트포스] 수식 최대화

by 꽁이꽁설꽁돌 2025. 10. 15.
728x90
반응형

 

     
목차

     

     

    문제

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

     

    프로그래머스

    SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

     

     

    코드 구현 방향

    최대한 분리해서 풀었다.

    1. 수식 계산 함수

    2. 등호 순위에 대한 모든 조합 함수

    3. 순위에 대해 수식 계산해주는 함수

    4. 수식을 부호와 수로 쪼개주는 함수

     

     

    코드 구현

    // 수식 계산 함수
    function caculate(a, b, express) {
        switch (express) {
            case "*":
                return a * b;
            case "+":
                return a + b;
            case "-":
                return a - b;
        }
    }
    
    // 분리를 위한 플래그 함수
    function flag(str) {
        return str === "-" || str === "*" || str === "+";
    }
    
    //수식과 수를 분리해서 배열에 넣어주는 함수
    function seperate(str, express, num) {
        let word = "";
        for (let i = 0; i < str.length; i++) {
            if (flag(str[i])) {
                express.push(str[i]);
                num.push(Number(word));
                word = "";
            } else word += str[i];
        }
        num.push(Number(word));
    }
    
    //수식에 대해 모든 조합을 구해주는 함수
    function order(express) {
        let comb = [];
        if (express.length === 3) {
            for (let i = 0; i < 3; i++) {
                for (let j = 0; j < 3; j++) {
                    for (let p = 0; p < 3; p++) {
                        if (i !== j && j !== p && i !== p)
                            comb.push([express[i], express[j], express[p]]);
                    }
                }
            }
        } else if (express.length == 2) {
            for (let i = 0; i < 2; i++) {
                for (let j = 0; j < 2; j++) {
                    if (i !== j) comb.push([express[i], express[j]]);
                }
            }
        } else {
            comb.push([express[0]]);
        }
        return comb;
    }
    
    //수식 우선순위에 따라 수를 계산하는 함수
    function orderCacul(express, num, order) {
        let idx = 0;
        while (num.length > 1) {
            if (idx >= order.length) break;
            let i = 0;
            while (true) {
                if (i >= express.length) break;
                if (express[i] === order[idx]) {
                    let calNum = caculate(num[i], num[i + 1], order[idx]);
                    express.splice(i, 1);
                    num.splice(i, 1);
                    num[i] = calNum;
                    i = 0;
                } else {
                    i++;
                }
            }
    
            idx++;
        }
        return Math.abs(num[0]);
    }
    
    function solution(expression) {
        var answer = 0;
        let express = [];
        let num = [];
        let ans = [];
        seperate(expression, express, num);
        let s = new Set();
        express.forEach((item) => s.add(item));
        let dic = [...s];
        let comb = order(dic);
    
        for (let cb of comb) {
            ans.push(orderCacul([...express], [...num], cb));
        }
        answer = Math.max(...ans);
        return answer;
    }

     

     

    반응형