https://programmers.co.kr/learn/courses/30/lessons/72411
function solution(orders, course) {
var answer = [];
let arr = {};
let a = combination(orders[0].split(''), 3);
for (let j = 0; j < orders.length; j++) {
let a = orders[j].split('').sort().join('');
for (let k = 1; k <= a.length; k++) {
let temp = combination(a.split(''), k);
for (let i = 0; i < temp.length; i++) {
let b = temp[i].join('');
arr[b] !== undefined ? (arr[b] += 1) : (arr[b] = 1);
}
}
}
for (let i = 0; i < course.length; i++) {
let len = course[i];
let item = Object.entries(arr).filter(
([key, value], index) => key.length === len
);
let max = 0;
item.forEach(([key, value]) => {
max = max > value ? max : value;
});
let key = Object.entries(arr).filter(
([key, value], index) =>
key.length === len && value === max && value !== 1
);
key.forEach(([key, value]) => {
answer.push(key);
});
}
return answer.sort();
}
function combination(arr, selectNum) {
const result = [];
if (selectNum === 1) return arr.map((v) => [v]);
arr.forEach((v, idx, arr) => {
const fixed = v;
const restArr = arr.slice(idx + 1);
const combinationArr = combination(restArr, selectNum - 1);
const combineFix = combinationArr.map((v) => [fixed, ...v]);
result.push(...combineFix);
});
return result;
}
조합을 만들어서 겹치는 것 중 많은것을 뽑아내는 문제였다.
제일 중요했던건 조합 구현이었던거 같고 나머지는 이에 맞춰 구현을 해주면 된다.
'Algorithm > PGMS' 카테고리의 다른 글
PGMS - 소수찾기 (0) | 2022.01.13 |
---|---|
PGMS 점프와 순간이동 (0) | 2022.01.10 |
PGMS 캐시 (0) | 2022.01.10 |
PGMS 전력망을 둘로 나누기 (0) | 2022.01.10 |
PGMS 거리두기 확인하기 (0) | 2021.12.29 |