https://school.programmers.co.kr/learn/courses/30/lessons/42579?language=javascript#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(genres, plays) {
var answer = [];
const hash = {};
const arr = [];
let compare = [];
for(let i = 0 ; i < genres.length ; i++) {
compare.push({key: genres[i], value: plays[i], index: i});
if(hash[genres[i]] === undefined) hash[genres[i]] = plays[i];
else hash[genres[i]] += plays[i];
}
let keys = Object.keys(hash);
keys.forEach( k => arr.push({key: k, value: hash[k]}));
while(keys.length > 0) {
arr.sort(function(a,b) {
return b.value - a.value;
})
let first = arr.length !== 0 ? arr.shift().key : false;
if(first === false) return answer;
compare.sort(function(a,b) {
return a.key === first ? -1 : 1;
})
let bestCandi = compare.map((c) => {
if(c.key === first) return c;
}).filter((b) => { return b !== undefined});
compare = compare.filter((c) => c.key !== first);
bestCandi.sort((a,b) => {
// 횟수 순
if(b.value !== a.value) return b.value - a.value;
// 횟수 같으면 고유 번호 낮은 순
return a.index - b.index;
});
// best 후보 중 2개만 선택
bestCandi = bestCandi.filter((d,index) => index < 2);
bestCandi.forEach((b) => {
answer.push(b.index);
})
delete hash[first];
}
return answer;
}
728x90
'Algorithm&CodingTest > Programmers' 카테고리의 다른 글
[Programmers] 코딩테스트 입문 - 연속된 수의 합 (0) | 2023.02.16 |
---|---|
[Programmers] 완전탐색 lv2 - 카펫 (0) | 2023.02.13 |
[Programmers] 해시 lv2 - 위장 (0) | 2023.02.12 |
[Programmers] 해시 lv1 - 폰켓몬 (0) | 2023.02.12 |
[Programmers] 스택/큐 lv2 - 다리를 지나는 트럭 (0) | 2023.02.12 |