반응형
문제
[https://programmers.co.kr/learn/courses/30/lessons/42579]
나의 풀이
function solution(genres, plays) {
var answer = [];
let obj = {};
let obj2 = {};
//obj에 장르의 총 재생횟수, obj2에 장르별 모든 [고유번호,재생횟수]를 넣어주었다.
for(let i = 0 ; i < genres.length;i++){
if (obj[genres[i]]){
obj[genres[i]] += plays[i]
} else{
obj[genres[i]] = plays[i]
}
if(obj2[genres[i]]){
obj2[genres[i]].push([i,plays[i]])
} else{
obj2[genres[i]] = [[i,plays[i]]]
}
}
//sort를 사용하기 위해 obj를 배열로 변환
let totalscore = []
let bestmusic = []
for (let genre in obj){
totalscore.push([genre,obj[genre]])
}
for (let genre in obj2){
bestmusic.push([genre,obj2[genre]])
}
totalscore.sort((a,b)=>b[1] - a[1])
// 장르의 갯수 만큼 best music 2개(혹은 1개)의 고유번호를 answer에 넣어준다.
for(let i = 0 ; i< totalscore.length;i++){
let target = totalscore[i][0]
let values = bestmusic.filter(el=>el[0] == target).pop()[1]
values.sort((a,b)=> b[1]- a[1])
if ( values.length === 1){
answer.push(values[0][0])
}
if ( values.length >1){
answer.push(values[0][0])
answer.push(values[1][0])
}
}
return answer;
}
다른이의 풀이
나도 객체로 데이터를 받고, 다시 배열로 만들어서 정리했는데,
배열 내에 객체 형태로 push 한 후 이를 활용하는게 더 좋아보인다.
요런 식으로 == > [{no:1, genre : 'classic' , play : 500}]
이러면 sort도 바로 쓸수 있고, for문으로 돌리면서 정보 접근도 편해보인다.( 나중에 다시 풀때는 이렇게 풀어보자)
참고
객체 정렬 = > 객체를 배열로 만든 후 정렬 // 참고
for in 은 객체 순환
for of 는 배열 순환
// 참고
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] level1. 숫자 문자열과 영단어 (javascript) (0) | 2021.07.13 |
---|---|
[프로그래머스] level2. 점프와 순간 이동(javascript) (0) | 2021.07.05 |
[프로그래머스] level1. 약수의 개수와 덧셈(javascript) (0) | 2021.06.23 |
[프로그래머스] level2. [3차] 방금 그곡 (javascript) (0) | 2021.06.16 |
[프로그래머스] level2. 소수 찾기 (javascript) (0) | 2021.06.15 |