[JavaScript][Programmers] 베스트 앨범

조준형·2021년 7월 15일
0

Algorithm

목록 보기
35/142
post-thumbnail

🔎 베스트 앨범

❓ 문제링크

https://programmers.co.kr/learn/courses/30/lessons/42579

📄 제출 코드

function solution(genres, plays) {
    let len = plays.length;
    let song = {};
    let sum = {};
    var answer = [];
    for (var i = 0; i < len; i++) {    
        song[i] = [plays[i], genres[i]];
        sum[genres[i]] == undefined ? sum[genres[i]] = plays[i] : sum[genres[i]] += plays[i];
    }
    console.log(sum);
    const sumSort = Object.entries(sum)
        .sort(([, a], [, b]) => b - a)
    console.log(sumSort);
    const songSort = Object.entries(song)
        .sort(([, a], [, b]) => b[0] - a[0])
    
    // console.log(songSort);
    let cnt = 0;
    for (var j = 0; j < sumSort.length; j++) {
        cnt = 0;
        for (var i = 0; i < songSort.length; i++) {
            if (cnt == 2) {
                continue;
            }
            if (songSort[i][1][1] == sumSort[j][0]) {
                // console.log(`${songSort[i][1][0]} , ${songSort[i][1][1]}`)
                let num = parseInt(songSort[i][0]);
                answer.push(num);
                cnt++;
            }
            
        }
    }
    
    return answer;
}

let genres = ["classic", "pop", "classic", "classic", "pop"];
let plays = [500, 600, 150, 800, 2500];
console.log(solution(genres, plays));

처음에 index를 키, 조회수와 장르를 value로 가지는 song 객체를 만들고,
각 장르별로 조회수의 합을 가지는 sum 객체를 만들었다.

그 후 첫 번째 난관에 부딪혔다.
객체의 sort하는 방법을 찾는데 오래 걸렸었다. 결국 검색을 통해 참고에 있는 링크에서 정렬하는 방법을 찾았다.

정렬된 sumSort와 songSort

[ [ 'pop', 3100 ], [ 'classic', 1450 ] ]
[
  [ '4', [ 2500, 'pop' ] ],
  [ '3', [ 800, 'classic' ] ],
  [ '1', [ 600, 'pop' ] ],
  [ '0', [ 500, 'classic' ] ],
  [ '2', [ 150, 'classic' ] ]
]

이제 두 개 배열을 반복하면서 genre에 맞는 song을 answer에 push하면 됐다.
처음에 songSort를 고정값으로 genre와 돌면서 비교해서 답이 계속안나왔다.
(이거 땜에 거진 한 시간은 걸린듯,,)
계속 생각하다보니 내가 반대로 돌리고 있는걸 깨닫고, song과 sum을 바꿔서 반복을 돌렸다.
그리고, 한개의 장르를 추가할 때 마다 cnt값을 +1시켜서 2라면 continue로 넘겨버린다.
앞에서 정렬을 큰 값먼저 정렬을 해줘서 뒤에 오는 작은 값들은 재낀다.

시간이 오래 걸리긴 했지만 뭔가 풀릴거 같아서 계속 붙잡아 결국 풀어서 기분은 좋다.

📘 참고

https://kyounghwan01.github.io/blog/JS/JSbasic/object-sort/#for-in문-활용-array-다시-만들기

profile
깃허브 : github.com/JuneHyung

0개의 댓글