프로그래머스 | 메뉴 리뉴얼

커몽·2021년 1월 28일
0

프로그래머스 level2

목록 보기
12/38

순위검색 문제랑 비슷한 풀이유형이다. combination사용하고 obj로 정리해서 푸는 방법이 비슷하다. 순위검색보단 이 문제를 더 빨리 풀 수 있었다.

function solution(orders, course) {
    var answer = [];
    let obj={}
    orders=orders.map(e=>e.split('').sort().join(''));
    for(let i=0;i<orders.length;i++){
       let result=[];
       let arr=orders[i].split('');
       for(let j=0;j<course.length;j++){
           result.push(...getCombinations(arr,course[j]));
       }
           obj=result.reduce((acc,e)=>{
                let joined=e.join('')
                    if(joined in acc){
                        acc[joined]+=1;
                    }else{
                        acc[joined]=1;
                    }return acc
            },obj)
      
   }
    let arr=Object.entries(obj);
    for(let i in course){
        let arr2=arr.filter(e=>e[0].length===course[i]&&e[1]!==1)
        let max=0
        if(arr2.length>0){
            max=Math.max(...arr2.map(e=>e[1]))
        }
        arr2.forEach(e=>{
            if(e[1]===max){
                answer.push(e[0])
            }
        })
    }
   
return answer.sort();
}

const getCombinations = function (arr, n) {
  const results = [];
  if (n === 1) return arr.map((e) => [e]); 
  arr.forEach((e, idx, origin) => {
    const rest = origin.slice(idx + 1); 
    const combinations = getCombinations(rest, n - 1); 
    const attached = combinations.map((combination) => [e, ...combination]); 
    results.push(...attached);
  });
  return results; 
}

0개의 댓글