[프로그래머스 level2] 수식 최대화_카카오 2020

김예지·2021년 10월 24일
0

문제

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


문제 풀이

코드

function solution(expression) {
    const math=[
        ['-', '*', '+'],
        ['-', '+', '*'],
        ['+', '*', '-'],
        ['+', '-', '*'],
        ['*', '+', '-'],
        ['*', '-', '+']
    ]; 
    let arr=[];
    
    for(let x of math){
        const tmp=expression.split(/(\D)/);
        for(let i=0; i<3; i++){
            while(tmp.includes(x[i])){
                const idx=tmp.indexOf(x[i]);
                tmp.splice(idx-1, 3, eval(tmp.slice(idx-1, idx+2).join('')));
                
            }
        }
        arr.push(Math.abs(tmp[0]));
    }
    return Math.max(...arr);
}
  • 이문제는 수식과 숫자를 나누는 것, 메소드를 활용하는 것이 관건인 문제였다.
  • 이분의 풀이를 참고했다.
  • 새로운 메소드 eval()에 대해서 배울 수 있었다. 문자열끼리의 연산이 필요할 때는 eval()을 기억하자!
  • 그리고 splice()도 새롭게 알 수 있었는데, months=["Jan", "Feb", "March", "April", "June"]로 가정했을 때, months.splice(3, 2, 'May');의 뜻은 index3부터 두개의 인덱스를 'May'로 대체한다라는 뜻이다. 이때, 두개의 인덱스 각각 May로 변환하는 것이 아닌 하나로 통합해서 대체한다.
    위 결과 Array ["Jan", "Feb", "March", "May"]이다.
  • 특이한 것은, '100-20+30'에서 .split('-')을 하면 ['100', '20+30']이지만, .split(/(\D)/)를하면 ['100', '-', '20', '+', '30']으로 나뉜다. 이는 \D를 괄호로 감싸줬기 때문이다. 괄호를 빼고 .split(/\D/)를 하면 ['100', '20', '30']으로 수식이 포함되지 않는다.
    메소드를 활용해서 푸는 것도 능력인듯!

참고 자료

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

0개의 댓글