Programmers - 메뉴 리뉴얼 (Javascript)

Hyeon·2021년 10월 10일
0
function makeCombinations(arr, selectNumber) {
    const results = [];
    if (selectNumber === 1) return arr.map((el) => [el]); 

    arr.forEach((fixed, index, origin) => {
      const rest = origin.slice(index + 1); 
      const combinations = makeCombinations(rest, selectNumber - 1); 
      const attached = combinations.map((el) => [fixed, ...el]); 
      results.push(...attached); 
    });
    return results; 
}

function getCombinations(orders, c){
    let ret = [];
    let menues;
    let combinations;
    orders.forEach((order)=>{
        menues = order.split("");
        combinations = makeCombinations(menues, c);
        combinations.forEach((combination)=>{
            combination.sort();
            if(!ret.includes(combination.join(""))){
                ret.push(combination.join(""))
            }
        })
    }) 
    return ret.map((item)=>item.split(""));
}



function solution(orders, course) {
    let answer = [];
    let combinations;//c개수의 코스일 때 가능한 모든 조합
    let currentCnt;//현재 조합이 포함된 order개수
    let maxCnt;//c개수의 코스일 때 가장 많이 포함된 combination의 order개수
    let maxCombinations;//c개수의 코스일 때 가장 많이 포함된 combination들(string[])
    
    
    course.forEach((c)=>{    
        combinations = getCombinations(orders, c);
        maxCnt = 0;
        maxCombinations = [];
        
        combinations.forEach((combination)=>{
            currentCnt = 0;
            orders.forEach((order)=>{
                if(combination.every((menue)=>order.includes(menue))){
                    currentCnt++;
                }
            })
            
            if(currentCnt>=2){
                if(maxCnt === currentCnt){
                    maxCombinations.push(combination.join(""));
                }
                
                if(maxCnt < currentCnt){
                    maxCnt = currentCnt;
                    maxCombinations = [combination.join("")];
                }
            }  
        })
        if(maxCombinations.length){
            answer.push(...maxCombinations);
        }
    })
    
    answer.sort();
    return answer;
}
profile
요즘 인터렉티브한 웹에 관심이 많습니다.

0개의 댓글