새소식

Programmers

[Programmers] 베스트앨범 문제 - (javascript)

  • -
728x90
문제 이름 :  베스트앨범

 

<<< 문제 내용 >>>

 

function solution(genres, plays) { // answer에는 각각의 장르, 재생횟수, 고유번호를 담고 // sumDic에 각 해시 키값마다 재생횟수를 더해서 sort를 위해 저장합니다. let answer = []; let sumDic = {}; genres.forEach((el, i)=> { answer.push({genres: el, count: plays[i], index: i}); if(el in sumDic){ sumDic[el] += plays[i]; }else sumDic[el] = plays[i]; }) // 위에 sumDic에 저장한 카테고리별 재생횟수를 이용하여 sort합니다. // sort 1 -> 같은 장르가 아니면 카테고리별 재생횟수가 더 많은 쪽을 앞으로 sort합니다. // sort 2 -> 재생 횟수가 다르면 재생 횟수 별로 내림차순 합니다. // 만약 다 같은 경우가 있을 시에는 이미 넣은 순서가 index 순 이기 때문에 // 굳이 명시해 줄 필요가 없습니다. answer.sort((a, b)=>{ if(a.genres !== b.genres) return sumDic[b.genres] - sumDic[a.genres]; if(a.count !== b.count) return b.count - a.count; }); let count = {}; // count에 장르별로 들어온 횟수를 count해서 2개부터는 filter로 지워버립니다. // 그 지운 것들을 map을 통해 index들만 return 받아 새로운 배열을 만들고 출력합니다. return answer.filter((el)=> { if(count[el.genres] >= 2) return false; if(el.genres in count) count[el.genres] += 1; else count[el.genres] = 1; return true; }).map(el=> el.index); }

 

 

 

 

 

 

도움이 되셨다면 공감 부탁드립니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.