알고리즘

알고리즘 주차의 마지막문제였다. 정규식을 좀 다룰줄 알아야겠다. 문제이해하는데 시간이 너무오래걸렸다. 정규표현식과 연산자가 문자열일떄 연산을하는 방법을 검색을통해 참고하여 한 2시간 50분정도 걸려 시간내에 겨우 제출할 수있었다..

접근 방법

  1. 문자열로 주어졌기떄문에 우선 문자열을 기준으로 배열로 나눠야겠다는생각이 들었다.
    그래서 split함수를 통해 나누려헀으나, 나눠야할 문자열이 -,+,*3개라 정규식 외의 방법이 떠오르지않았다.( 정규식으로 가능하다는 사실을 혹시나해서 검색을통해 알아보기전까진 한참을 헤맸다.)
    정규식을 통해 split함수를 적용할 수있다는걸 검색을통해 알았고, 적용시켰다.
  2. 모든 경우의수를 대입시켜야하지만, 순열을 구현 하자니 막막했다. 근데 최대의 경우의수가+,-,* 3!경우의수로 6개라 직접 모든 경우의수를 나열할 생각을 했다. 여기서 만약 부호가 2개면 어떻게구현할 지를 고민하다가 분기처리로 작성하였고, 우선은 for문으로 모든 연산자의 경우의수를 돌기로 결정하고, 해당하지않는 연산자를 만나면 분기처리로 넘어갔다.
  3. 연산자가 문자열로되어있어, 연산자를 만났을떄 연산함수를 따로만들어 작성했다.
    4.splice를 활용하여 연산된결과를 연산에 사용된 2개의 숫자와 1개의 연산자를포함해 3개를 배열에서 지우고 결과값으로 대체했다.
function solution(expression) {
    let answer = 0;
    let marks = [["*","-","+"],["*","+","-"],["+","-","*"],["+","*","-"],["-","+","*"],["-","*","+"]];
    
    const expressionArray = expression.split(/(\D)/);
    const answerList = [];
    
    
    
    const calculator = (n1,n2,operator) => {
        if(operator === "+") {
            return n1 + n2;
        }
        if(operator === "-") {
            return n1 - n2;
        }
        if(operator === "*") {
            return n1 * n2;
        }
    }
    
    for(let x of marks) {
        const temp = [...expressionArray];
        for(let i= 0; i<3; i++) {
            for (let j = 0; j<temp.length; j++) {
                if(temp[j] === x[i]) {
                    
                     const result = calculator(+temp[j-1],+temp[j+1],temp[j]);
                    
                    temp.splice(j-1,3,result)
                    j = 0;
                }
            }
        }
       answerList.push(Math.abs(temp[0]));
    }
 
    
    
    for(let i = 0; i<answerList.length; i++) {
        if(answer < answerList[i]) answer = answerList[i];
    }     
    return answer
}

코어자바스크립트 내용정리(2.실행컨텍스트)

  • 실제로 면접을 본다는생각으로 어떤식으로 답변을하면 좋을지를 생각하면서 내용을 정리해보려한다. 확실히 책이 더 자세히 나왔음에도 나름대로 정리를 하면서 읽어나가는게 처음봤을땐 못봤던 내용도 발견되고 좋은것같다.
  • 내용정리 링크 : Chapter2. 실행컨텍스트

함수형 자바스크립트 인프런 강의

profile
FE developer 🙂

0개의 댓글