본문 바로가기

알고리즘 문제풀이

[프로그래머스] 2021 카카오 공채 - 메뉴 리뉴얼

오늘 푼 문제

 

2. 메뉴 리뉴얼 / Lv.2 / 시간 : 89분(시간초과)

programmers.co.kr/learn/courses/30/lessons/72411

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr

function solution(orders, course) {
    var answer = [];
    let getCombination = (str,n)=>{
        let len = str.length;
        if(len<n) return null;
        if(len===n) return [str];
        else if(n===1){
            return str.split('');
        }
        else{
            let arr = [];
            for(let i=0;i<=len-n;i++){
                let temp = getCombination(str.slice(i+1),n-1);
                temp.forEach(v=>arr.push(str[i]+v))
            }
            return arr
        }
    }
    
    let hash =  course.reduce((acc,cur)=>{
        orders.forEach(order=>{
            let combis = getCombination(order,cur);
            if(combis) combis.forEach(combi=>{
                combi = combi.split('').sort().join('');
                if(acc[cur]) acc[cur][combi] = (acc[cur][combi]|0)+1;
                else acc[cur] = {[combi]:1}
            })
        })
        return acc;
    },{})
    let values = Object.values(hash);
    let maxs = values.map(ob=>Math.max(...Object.values(ob)));
    answer = values.reduce((acc,cur,i)=>{
        if(maxs[i]===1) return acc;
        acc = acc.concat(Object.keys(cur).filter(k=>cur[k]===maxs[i]));
        return acc;
    },[]).sort()
    
    return answer;
}

 

 

조합 찾는 식 세우느라 헤맴...