관리 메뉴

Algo μ“°μž

[Programmers] (Javascript) μˆ˜μ‹ μ΅œλŒ€ν™” λ³Έλ¬Έ

πŸ’― CodingTest/Programmers

[Programmers] (Javascript) μˆ˜μ‹ μ΅œλŒ€ν™”

S.Honey 2022. 4. 25. 15:11

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

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μˆ˜μ‹ μ΅œλŒ€ν™”

IT 벀처 νšŒμ‚¬λ₯Ό μš΄μ˜ν•˜κ³  μžˆλŠ” 라이언은 맀년 사내 해컀톀 λŒ€νšŒλ₯Ό κ°œμ΅œν•˜μ—¬ μš°μŠΉμžμ—κ²Œ μƒκΈˆμ„ μ§€κΈ‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이번 λŒ€νšŒμ—μ„œλŠ” μš°μŠΉμžμ—κ²Œ μ§€κΈ‰λ˜λŠ” μƒκΈˆμ„ 이전 λŒ€νšŒμ™€λŠ” λ‹€λ₯΄κ²Œ λ‹€μŒκ³Ό

programmers.co.kr

 

β–Ά μ½”λ“œ : 

function solution(expression) {
    var orders = [
        ['*', '+', '-'],
        ['*', '-', '+'],
        ['+', '-', '*'],
        ['+', '*', '-'],
        ['-', '+', '*'],
        ['-', '*', '+'],
    ];
    let answer = -1;
    for (const order of orders){
        var res = parseInt(recursive(order,0,expression));

        res= Math.abs(res);
        
        if (res > answer)
        {
            answer = res;
        }
    }


    return answer;
}

function recursive(order,n, expr)
{
    if (n == 2)
    {
        return eval(expr);
    }
    else
    {
        if (order[n] == '*')
        {
            let temp = expr.split('*');
            let val = [];
            for (const e of temp)
            {
                val.push(recursive(order, n + 1, e));        
            }
            return eval(val.join('*'));
        }
        else if(order[n] == '-')
        {   
            let temp = expr.split('-');
            let val = [];
            for (const e of temp)
            {
                val.push(recursive(order, n + 1, e));        
            }
            return eval(val.join('-'));
        }
        else if(order[n] == '+')
        {
            let temp = expr.split('+');
            let val = [];
            for (const e of temp)
            {
                val.push(recursive(order, n + 1, e));        
            }
            return eval(val.join('+'));
        }
    }
    return temp;
}

 

β–Ά 문제 풀이 : 

1. 계산 μˆœμ„œλ₯Ό μ €μž₯ν•˜λŠ” orders 배열을 μƒμ„±ν•˜μ˜€λ‹€.

2. 각각의 κ³„μ‚°μˆœμ„œμ— 따라 계산을 μ§„ν–‰ν•˜κ³ , κ²°κ³Όλ₯Ό 가져와 μ΅œμ†Œκ°’μ„ answer에 μ €μž₯ν•˜μ˜€λ‹€.

3. recursiveν•¨μˆ˜λ₯Ό 톡해 계산을 μ§„ν–‰ν•œλ‹€.

  3-1) recursiveν•¨μˆ˜λŠ” n=2μΌλ•Œ μž¬κ·€λ₯Ό μ’…λ£Œν•œλ‹€.

  3-2) 각각의 order에 μ €μž₯된 μ—°μ‚°μžλ₯Ό κΈ°μ€€μœΌλ‘œ λ‚˜λˆ„κ³  μž¬κ·€λ₯Ό 톡해 λ‚˜λˆ μ§„ ν‘œν˜„μ‹μ—λŒ€ν•΄ 같은 과정을 λ°˜λ³΅ν•œλ‹€.

  3-3) order의 λ§ˆμ§€λ§‰ 연산이 μ’…λ£Œλ¨μ— 따라 순차적으둜 λ°˜ν™˜ν•˜κ³ , 이후 λ°˜ν™˜λœ κ²°κ³Ό λ¬Έμžμ—΄λ“€μ„ λ‹€μ‹œ λ‚˜λˆˆ μ—°μ‚°μžλ‘œ            joinν•˜μ—¬ κ²°κ³Όλ₯Ό κ³„μ‚°ν•œλ‹€.