본문 바로가기
PS(Javascript)

[프로그래머스] Lv2 메뉴 리뉴얼

by 같이긍뱅와 2023. 7. 13.

문제

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

풀이

※ Javascript는 var, let, const 키워드 없이 변수 선언이 가능하고 이 경우 전역 변수로 취급된다.

  1. course를 배열을 순회하면서 해당 숫자에 해당하는 코스요리가 가능한지 알아본다. 이 때 각 orders에서 몇 개의 코스요리가 나오는지 DFS로 재귀함수를 돌면서 object에 해당 코스요리가 몇 개씩 나오는지 구한다.
  2. object의 value 값이 가장 큰 수에 해당하는 코스요리를 찾고 그것이 2보다 크다면 그것과 같은 value를 갖는 코스요리까지 함께 정답배열에 추가 이 때 정답 배열에는 value가 아닌 key 값을 넣는다.
  3. answer를 오름차순 정렬 후 리턴한다.

코드

const DFS = (comb, idx) => {
    if(comb.length === cnt) {
        if(!m[comb]) m[comb] = 1;
        else m[comb]++;
        return;
    }
    for(let i = idx; i < s.length; i++) {
        DFS(comb+s[i], i+1);
    }
}

function solution(orders, course) {
    var answer = [];
    course.forEach(n => {
        m = {};
        cnt = n;
        orders.forEach(order => {
            order = order.split('').sort().join('');
            if(n <= order.length) {
                s = order;
                DFS('', 0);
            }
        })

        const nm = Object.entries(m).sort(([,a], [,b]) => b-a);

        if(nm.length) {
            const biggest = nm[0][1];
            if(biggest >= 2) {
                for(const a of nm) {
                    if(a[1] === biggest) answer.push(a[0]);
                    else break;
                }
            }
        }
    })
    return answer.sort();
}

댓글