https://programmers.co.kr/learn/courses/30/lessons/42579
1. 객체로 장르별 재생 수를 정리함
2. 장르별 재생 수를 다 더해 가장 많이 플레이 된 장르 순으로 정렬
3. 장르별 재생 수를 내림차순으로 정렬
4. 가장 많이 플레이 된 장르부터 재생 수 높은 두 개를 뽑아 배열에 저장
5. 배열에 있는 재생 수 들의 원래 배열에서의 위치를 가져와 다시 배열에 저장해 반환함
function solution(genres, plays) { var answer = []; var arr = []; var obj; //객체로 장르와 재생수 정리 for(var i = 0; i < genres.length; i++){ if(arr.findIndex(a => a.genres == genres[i]) == -1){ obj = { genres : genres[i], plays : [plays[i]]}; arr.push(obj); }else{ var index = arr.findIndex(a => a.genres == genres[i]); arr[index].plays.push(plays[i]); } } //가장 많이 플레이 된 장르 순으로 정렬 var arr2 = []; arr.filter(function(i){ var sum = 0; i.plays.filter(function(a){ sum += a; }); arr2.push(sum); }); // 배열 정렬하기 전에 원래 배열 따로 변수에 저장 var arrTmp = arr2.slice(); arr2 = sortF(arr2); //장르별 많이 재생된 횟수의 인덱스를 배열에 저장 for(var i = 0; i < arrTmp.length; i++){ var array = arr[arrTmp.indexOf(arr2[i])].plays; var tmp = sortF(array).slice(0,2); for(var j = 0; j < tmp.length; j++){ if(answer.indexOf(plays.indexOf(tmp[j])) != -1){ var element = tmp[j]; var idx = plays.indexOf(element); var indices = []; while (idx != -1) { indices.push(idx); idx = plays.indexOf(element, idx + 1); } answer = answer.concat(indices.slice(1,indices.length)); } else{ answer.push(plays.indexOf(tmp[j])); } } } return answer; //내림차순정렬함수 function sortF(arrM){ arrM.sort(function(a, b){ return b-a; }); return arrM; } }
- 해시, 객체 모두 자주 안써봐서 공부하며 풀어야해서 굉장히 시간이 오래 걸렸다.
- 앞으로는 연습을 자주해야겠다. 이번 코드도 공부하면 더 정돈되게 짤 수 있을 것 같은데 아직 많이 부족해 저 코드가 최선이었다ㅜㅜ