프로그래머스 문제 읽을 때면 종종 읽어도 읽은 것 같지 않은 느낌이 들 때가 많다.ㅎㅎ
많이 풀어보면 쉬워지겠지..ㅎㅎ흑
문제)
과정)
첫번째, 스트리밍 총합이 큰 장르 순으로 내림차순 정렬 되어야 하고,
두번째, 각 장르별 스트리밍 수가 많은 노래를 내림차순 정렬
세번째, 정렬된 상태에서 각 장르별로 노래 두개를 뽑아야 한다.
장르에 노래가 하나 뿐일 경우 하나만 뽑는다.
총 반환되는 값은 장르*2 ( - 알파)가 된다.
내가 재출한 해설)
function solution(genres, plays) {
let answer = [];
let genres_ = Array.from(new Set(genres)); //중복 제거한 장르만 모아놓음
let target = [];
genres_.forEach((gen, id) => { //각 장르에 포함된 노래들을를 해시구조로 만들어 준다.
target[id] = genres.map((element, index) => { if(gen === element){
return {song_title:index, play:plays[index]};}else{return null} });
});
target.forEach((element, index) => {
target[index] = element.filter(v=>{return v !== null}); // 위 과정에서 생긴 null값 제거해주고
target[index].sort((prev, next) => { //장르에 속한 노래들 스밍 수로 내림차순 정렬
return next.play - prev.play;
});
});
target.forEach(function(element, index){ //장르별 스밍 수 총합 구해준다.
let sum = 0;
element.forEach((e) => { sum += e.play});
target[index].push(sum);
sum = 0;
});
target.sort((prev, next) => {//스밍 수 기준으로 장르 내림차순 정렬
return next[next.length-1] - prev[prev.length-1];
});
let count = 0;
while ( genres_.length > count) {
if(target[count].length >= 3 ){
for(let i = 0; i < 2; i++ ){ //장르 안에 속한 노래가 2곡 이상일 경우
answer.push(target[count][i].song_title);
}
}else if(target[count].length <= 2){
for(let i = 0; i <1; i++ ){ //장르 안에 속한 노래가 1곡일 경우
answer.push(target[count][i].song_title);
}
}
count++;
}
return answer;
}
후기) 자꾸 for문을 쓰게 되니까 뭔가 잘못하고 있는 건가 싶기도 하고...ㅋㅋ
'Web > Algorithm' 카테고리의 다른 글
2022 카카오 신입 공채 - 신고 결과 받기 (0) | 2022.09.03 |
---|---|
2019 카카오 개발자 겨울 인턴십) 크레인 인형뽑기 게임 (0) | 2020.12.04 |
[ 프로그래머스 > 정렬 ]H-Index (0) | 2020.04.25 |
[ 프로그래머스 > 해시] 위장 (0) | 2020.04.23 |
[ 프로그래머스 > 해시] 완주하지 못한 선수 (0) | 2020.04.23 |