본문 바로가기

프로그래머스/구현

[구현] 프로그래머스 '메뉴 리뉴얼' - js

반응형

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/72411

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2. 코드

function solution(orders, course) {
    let map = new Map(); // 해시 맵에 조합 및 해당 조합이 나온 갯수 저장
    let set = new Set(); // 각 orders 요소에 대한 조합 만들 때 중복 제거
    let best = new Array(course.length).fill(0); // 조합 길이 별 조합 갯수 최댓값 저장
    let answer = []; // 최종 코스요리 모음
    
    // 각 orders에 대한 조합 만들기 
    const makeC = (arr,str) => {
        if(course.includes(str.length)){ 
            map.set(str, map.get(str) + 1 || 1);
            if(best[course.indexOf(str.length)] < map.get(str)) 
                best[course.indexOf(str.length)] = map.get(str);
        }
        
        for(let i=0;i<arr.length;i++){
            let newStr = (str + arr[i]).split("").sort().join("");
            let newArr = arr.slice();
            newArr.splice(i,1);
            if(!set.has(newStr)){
                set.add(newStr);
                makeC(newArr, newStr);
            }
        }
    }
    
    for(let i=0;i<orders.length;i++){
        makeC(orders[i].split(""),"");
        set = new Set();
    }
    
    // 각 조합의 갯수가 해당 조합의 길이 조합 리스트 중 최댓값에 해당할 경우
    for(let [k,v] of map){
        if(v >= 2 && v === best[course.indexOf(k.length)]) answer.push(k);
    }
    
    return answer.sort();
}

역시 빡구현 문제.. 그래도 빡구현 문제에 점점 익숙해져서 좋다! 처음으로 내 손으로 정답을 얻은 빡구현 문제 :)

반응형