알고리즘 - 메뉴 리뉴얼

HoJeong Im·2021년 9월 25일
0

Break_Algo

목록 보기
22/46

문제

코드

function solution(orders, course) {
    var answer = [];
    
    const perm = (arr, index) => {
        
        let result = [];
        
        if(index === 1) return arr.map((v)=>[v]);
        
        arr.forEach((v,index1, arr1)=>{
            
            const target = v; 
            
            const arr2 = arr1.slice(index1+1);
            
            const permArr = perm(arr2,index-1);
            
            const combine = permArr.map((test)=> [target, ...test]);
            
            result.push(...combine);
            
        });
        
        return result; 
        
    }
    let obj = {};
    orders.forEach((order)=>{
       let arr = order.split("");
       for(let i = 0; i < course.length ; i++){
           let val = perm(arr,course[i]);
           
           val.forEach((val1)=>{
               val1.sort((a,b)=>{
                   if(a<b){
                       return -1;
                   }
                   else if(a>b){
                       return 1;
                   }
                   else{
                        return 0;
                   }
               })
               let val2 = val1.join("");
               if(obj[val2]){
                   obj[val2]++;
               }
               else {
                    obj[val2] = 1;
               }
           });
          
       }
    });
    let val3 = Object.entries(obj);
    //console.log(val3)
    val3 = val3.filter((a)=> a[1]>=2)
    
    val3.sort((a,b)=>{
        return b[1] - a[1]
    })
    //console.log(val3)
    course.forEach((test)=>{
        let test1 = val3.filter((val)=> val[0].length === test);
        let test2 = test1.map((val)=>{
            return val[1];
        });
        let max = Math.max(...test2);
        
        test1.forEach((test4)=>{
            if(test4[1] === max){
                answer.push(test4[0]);
            } 
        });
        
        
    })
    
    answer.sort((a,b)=>{
        if(a<b){
            return -1;
        }
        else if(a>b){
            return 1;
        }
        else {
            return 0;
        }
    });
    
    return answer;
} 

회고

  • sort 메소드는 원래 배열의 순서를 변경함

  • 기본 조합을 사용해서 구하는 예시, n의 값이 작은 것을 이용해서 구할 수 있는 부분!

profile
꾸준함이 제일 빠른 길이었다

0개의 댓글