반응형
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42579
2. 설명
해당 문제의 설명은 주석으로 대신한다.
Object를 사용하여 해쉬 테이블을 만드는 방식을 사용했다.
3. 코드
function solution(genres, plays) {
let answer = [];
// 장르 별 재생 횟수 저장하는 객체
let totalPlays = {};
// 각 노래 별 장르, 재생 횟수, 인덱스 저장하는 객체
let playList = {};
for(let i=0; i<genres.length; i++){
totalPlays[genres[i]] = (totalPlays[genres[i]] || 0) + plays[i];
// 객체에 그 노래의 장르 키 값에 해당하는 벨류가 이미 있으면 그 벨류값에 해당하는 배열에 push
// 없으면 빈 배열에 push
let arr = (playList[genres[i]] || []);
arr.push({genres: genres[i], plays: plays[i], no: i});
// playList 객체 해당 장르 키값에 해당하는 벨류로 arr를 재할당
playList[genres[i]] = arr;
}
// 재생 횟수를 기준으로 내림차순
let totalPlaysArr = Object.keys(totalPlays).sort((a, b) => totalPlays[b] - totalPlays[a]);
// 각 장르마다 노래 재생횟수가 많은 순으로 내림차순 해준 후,
// 해당 장르에 노래가 한 개라면 한개만, 두개 이상이면 두번째 노래까지 인덱스 추출
for(let i=0; i<totalPlaysArr.length; i++){
playList[totalPlaysArr[i]].sort((a, b) => b.plays - a.plays);
answer.push(playList[totalPlaysArr[i]][0].no);
if(playList[totalPlaysArr[i]][1]){
answer.push(playList[totalPlaysArr[i]][1].no);
}
}
return answer;
}
반응형
'프로그래머스 > 해시' 카테고리의 다른 글
[해시] 프로그래머스 '귤 고르기' - js (0) | 2023.03.28 |
---|---|
map을 사용한 해시테이블 (0) | 2023.03.26 |
[해시] 프로그래머스 '위장' - js (0) | 2022.11.03 |
[해시] 프로그래머스 '폰켓몬' - js (0) | 2022.11.01 |
[해시] 프로그래머스 '완주하지 못한 선수' - js (0) | 2022.09.26 |