2021 KAKAO BLIND RECRUITMENT-메뉴리뉴얼

06.08에 푼 문제입니다🌷
메뉴리뉴얼
순열을 이용한 문제이다.

function solution(orders, course) {
    var answer = [];
    let menulist=[]
    let maplist=new Map()
    //순열로 가능한 메뉴를 뽑아본다.
    orders.map(order=>{
        order=[...order].sort()
        course.map(c=> menulist.push(...getCombination(order,c)))
    })
    //세트메뉴가 몇명의 손님이 주문했는지 계산한다.
    menulist.map(menu=>{
        menu=menu.join('')
        if(!maplist.get(menu))
            maplist.set(menu,0)
        maplist.set(menu,maplist.get(menu)+1)
    })
    // 한명 이상이 주문한 메뉴를 고른다.
    for(let [key,value] of maplist){
        if(value<2) maplist.delete(key)
    }
    menulist=[...maplist]
    //c개의 코스 메뉴중 가장 많이 주문한 코스를 선택한다.
    course.map(c=>{
        const menus=menulist.filter(menu=>c===menu[0].length)
        menus.sort((a,b)=>b[1]-a[1])
        const max=menus[0]
        const setmenus=menus.filter(m=>m[1]===max[1])
        setmenus.map(menu=>answer.push(menu[0]))
    })
    answer.sort()
    return answer;
}

function getCombination(orders,num){
    const results=[]
    if(num===1) return orders.map(order=>[order])
    
    orders.forEach((fixed,index,origin)=>{
        const rest=origin.slice(index+1)
        const combination=getCombination(rest,num-1)
        const attach = combination.map(com=>[fixed,...com])
        results.push(...attach)
    })
    
    return results
}

좋은 웹페이지 즐겨찾기