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 |