[JS][프로그래머스 -LEVEL 2 -수식 최대화 ]

정대만·2023년 7월 18일

코딩테스트

목록 보기
25/51
post-thumbnail

문제 해석

  • 연산자의 우선순위를 정하는 폼이다.
  • 이때 연산자의 수에 따른 우선순위가 달라진다.
    -> 그래서 나는 순열을 이용하여 우선순위를 만들려고 했으나.. ( 이 부분에서 시간이 너무 오래 걸리는듯 해서 . 고민이 들었다. 굳이 ? 만들어야되나?)
  • 따라서 그냥 내가 만들었다.
  • 연산자 순위에 따른 합을 만들어주면 금방 풀린다.


함수를 만들어서 답을 뽑아냈다.

  • 매개변수에 포함된 연산자 인 경우만 < 연산을 해주세요 라고 한다.

  • 그다음 for 문을 이용해서 연산자의 위치를 확인한후 연산자 앞 뒤 를 뽑아서 함수를 이용해 값을 계산해준뒤 splice 함수를 이용해서 삭제하고 그 자리에다가 추가해주세로를 넣으면 된다.

    -Math.abs = 절대값 함수이다.

  • const expression = expression1.split(/(\D)/);
    -> 여기 부분이 중요하다. split 를 이용한 정규식 자르기이다. 우리는 연산자를 토대로 잘라야되기 때문에 / (\D ) == 정수가 아닌것을 잘라주세요 /
    를 사용해서 쉽게 자를수 있다. < - 처음에는 어떻게 자르지? 이것때문에 많이 고민했는데 정규식을 이용하면 금방 구할수 있다. 정규식 문제가 많이 나오고 있다. ..

function solution(expression1) {
    var answer = 0;
 const expression = expression1.split(/(\D)/); 
 var max_return=0;
 
    //수식을 숫자와 아닌것을 뽑은다음 .  
    // 갯수를 통해 우선순위를 부여하는것 
    //조합 순열 이거 개념을 이용해서 뽑는거 같은디 
    //[] 이런식으로 만듬 이중배열 
    // 그다음 이순으로 stack 구조 만들기
    
    var sushi=[
        ['*','-','+'],
        ['*','+','-'],
        ['+','-','*'],
        ['+','*','-'],
        ['-','+','*'],
        ['-','*','+']
    ];
     const hey_go= function(x1,x2,ima){
         if(ima=='*'){
             return x1*x2;
         }
         if(ima=='+'){
             return x1+x2;
         }
         if(ima=='-'){
             return x1-x2;
         }
     }
    
    
    for(var i=0; i<sushi.length; i++){
           const copy_expression=expression.slice();
   
        for(var go_i=0; go_i<3; go_i++){
          if(copy_expression.includes(sushi[i][go_i])){
          
            for(var go=0; go<copy_expression.length; go++){
               if(copy_expression[go]==sushi[i][go_i]){

              var new_hey=hey_go(   parseInt(copy_expression[go-1]),parseInt(copy_expression[go+1]),sushi[i][go_i]);
               copy_expression.splice(go-1,3,new_hey);
          
                   go-=1;
           }
       }

    }
            if(isNaN(copy_expression)==false){
            max_return= Math.max(Math.abs(copy_expression),max_return);    
            }
            
        }
    
        }
    return max_return;
}

solution("50*6-3*2")
profile
안녕하세요

0개의 댓글