일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- javascript
- 프로그래머스 JS
- 정렬
- 자바
- 자바스크립트
- programmers
- 코딩테스트
- bfs/dfs
- greedy
- 연습문제
- Java
- CSS
- SWEA
- 코딩테스트 입문
- 네트워크
- Next.js
- CLASS
- Baekjoon
- 그리디
- js
- Lv2
- 이것이 코딩테스트다 with 파이썬
- Lv1
- Typescript
- 백준
- 알고리즘
- Python
- node.js
- React
Archives
- Today
- Total
개발야옹
[Programmers] 해시 lv3 - 베스트앨범 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42579?language=javascript#
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 |