새소식

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

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

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