프로그래머스 LEVEL 3(베스트 앨범)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-10-20

  • 해결 방법 :
    • 예전에 c++로 해결했던 문제인데 프로그래머스 실습에 포함되어 있어서 자바스크립트로 풀어봄
    • genres를 돌며 장르 별 인덱스: 재생 수 쌍을 value값으로 추가
    • 정렬을 위해 array에 담은 후 장르 별 플레이 수에 따라 내림차순으로 장르 정렬
    • 정렬된 array를 돌며 장르 속 앨범들을 플레이 수로 내림차순 정렬
    • 장르 별 인덱스를 최대 2개가 되도록 push
  • 회고 :
    • x
  • 코드

    function solution(genres, plays) {
        const answer = [];
        const map = new Map();
            
        for (const [index, genre] of genres.entries()) {
            map.has(genre) ? map.set(genre, Object.assign(map.get(genre), {[index] : plays[index]})) : map.set(genre, {[index] : plays[index]})
        }
            
        const arr = [...map];
        arr.sort((a, b) => {
            let a_sum = 0;
            for (const [key, value] of Object.entries(a[1])) {
                a_sum += value;
            }
            let b_sum = 0;
            for (const [key, value] of Object.entries(b[1])) {
                b_sum += value;
            }
            return b_sum - a_sum;
        });
            
        for (const ele of arr) {
            const array = Object.entries(ele[1]).sort((a, b) => b[1] - a[1]);
            answer.push(parseInt(array[0][0]));
            if (array[1]) answer.push(parseInt(array[1][0]));
        }
            
        return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges