본문 바로가기
Coding Test/Programmers

[Programmers] (2020 카카오 인턴십) Lv 2. 수식 최대화

by song.ift 2023. 3. 13.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

// 탐색을 통해 ["+", "-", "*"] 경우의 수 추출
const permutation = (operation, visited, priority, max, expression) => {
    if (operation.length === visited.filter((o) => o).length) { // 총 방문이 연산자 수 만큼 될 경우,
        const [tempExp, tempPrior] = [[...expression], [...priority]];

        // 우선순위에 따라 값을 구함.
        while (tempPrior.length) {
            const op = tempPrior.shift(); // 우선순위 데이터를 하나씩 제거하면서 도출

            let idx = tempExp.indexOf(op);
            while (idx !== -1) { // 해당 연산자가 있을 경우, 반복
                const sum = eval(tempExp[idx - 1] + op + tempExp[idx + 1]);
                // idx가 연산자 인덱스이므로 계산해야할 두 값은 idx-1, idx+1
                
                tempExp.splice(idx - 1, 3, sum);
                // splice를 통해 idx - 1부터 3개를 삭제하고 구한 값을 그 자리에 넣음.
                // ex) ['1','+','2','*','3']에서 연산자가 '+'라면 splice후에 값은 [3,'*','3']으로 변환.  

                idx = tempExp.indexOf(op);
            }
        }

        return Math.max(max, Math.abs(parseInt(tempExp))); // tempExp에는 최종적으로 계산된 값 하나만 남게 되며, max값과 비교.
    }

    for (let i = 0; i < operation.length; ++i) {
        if (visited[i]) continue;

        (visited[i] = true), priority.push(operation[i]);
        max = permutation(operation, visited, priority, max, expression);
        (visited[i] = false), priority.pop();
    }

    return max;
};

const solution = (expression) => permutation(["+", "-", "*"], new Array(3).fill(false), [], 0, expression.match(/\d+|[\-\+\*]/g));
// 마지막 매개변수 - 숫자와 연산자를 나누는 정규표현식
// ex) '50*6-3*2' => ['50','*','6','-','3','*','2']

GitHub : https://github.com/developeSHG/Algorithm-Baekjoon_Programmers/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/lv2/67257.%E2%80%85%EF%BC%BB%EC%B9%B4%EC%B9%B4%EC%98%A4%E2%80%85%EC%9D%B8%ED%84%B4%EF%BC%BD%E2%80%85%EC%88%98%EC%8B%9D%E2%80%85%EC%B5%9C%EB%8C%80%ED%99%94

 

GitHub - developeSHG/Algorithm-Baekjoon_Programmers: 백준 and 프로그래머스 소스코드

백준 and 프로그래머스 소스코드. Contribute to developeSHG/Algorithm-Baekjoon_Programmers development by creating an account on GitHub.

github.com

 

댓글