FrontEnd/프로그래머스

[JS] 메뉴 리뉴얼

728x90

알파벳이 총 10개까지나오니 순열을 사용해도 괜찮을 문제라는 생각이 들었다.

 

따라서 각 order별로 2개,3개,4개라면 각각의 순열조합을 찾은이후 이를 Map 자료형에 매핑해가며 개수를 조합했다.

 

단, 음식들이 정렬되어서 나오지 않으니 정렬해주는 과정이 필요했다.

 

 

Map자료형에서 최대값들을 뽑아내서 저장했는데, max_ 값을 2로 설정해서 만약 주문이 2개이상 나오지 않으면 저장하지 않도록 설정해주었다.

 

이후 나온 조합들을 모두 한 배열에 넣고 정렬해준 후 제출하였다.

 

 

순열,조합을 생각보다 완전탐색 문제들에서 자주 사용하게 되는것 같은데 언제든 바로바로 나올 수 있게 연습을 좀 더 해두어야 될 것 같다..

 

 

 

 

 

const getCombination = (ary,n) => {
    
    let ret = []
    if (n===1) return ary.map(el =>[el])
    
    ary.forEach((fixed,idx,ary) => {
        const rest = ary.slice(idx+1)
        const combination = getCombination(rest,n-1)
        
        const attached = combination.map(el => [fixed , ...el])
        ret.push(...attached)
    })
    return ret
}


function solution(orders, course) {
    
    const ret = []
    for (const size of course) {
        
        
        const map = new Map()
        for (const order of orders) {
            getCombination(order.split("").sort(),size).forEach(el => {
                el = el.join("")
                if (map.get(el)) map.set(el , map.get(el)+1)
                else map.set(el,1)
            })
        }
        
        let tmpAry = []
        let max_ = 2
        for (const [key,val] of map) {
            if (map.get(key) > max_) {
                max_ = map.get(key)
                tmpAry = [key]
            } else if (map.get(key)===max_) {
                tmpAry.push(key)
            }
        }
        ret.push(...tmpAry)
    }
    
    return ret.sort()
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 삼각 달팽이  (0) 2023.06.18
[JS] 쿼드압축 후 개수 세기  (0) 2023.06.18
[JS] 순위 검색  (0) 2023.06.16
[JS] 괄호 회전하기  (0) 2023.06.14
[JS] 행렬 테두리 회전하기  (0) 2023.06.14