개발 공부
(프로그래머스)(자바스크립트) 베스트앨범 본문
코딩테스트 연습 - 해시 - 베스트엘범
https://programmers.co.kr/learn/courses/30/lessons/42579
첫시도. (틀린 답안)
sorting까지 완료. 하지만 효율적으로 장르별 2개씩만 가져오는 게 생각이 안나 갈아 엎었다.
function solution(genres, plays) {
var answer = [];
var musicMapArray = [];
var totalObj = {};
for(var i = 0 ; i < genres.length ; i ++){
var musicObj = {};
musicObj['number'] = i;
musicObj['genre'] = genres[i];
musicObj['count'] = plays[i];
totalObj[genres[i]] = totalObj[genres[i]] ? totalObj[genres[i]] + plays[i] : plays[i];
musicMapArray.push(musicObj);
}
console.log(musicMapArray, totalObj)
musicMapArray.sort(function (a, b) {
if (totalObj[a.genre] > totalObj[b.genre]) {
return -1;
}
if (totalObj[a] < totalObj[b] ) {
return 1;
}
// a must be equal to b
if(a.genre == b.genre){
if (a.count > b.count) {
return -1;
}
if (a.count < b.count ) {
return 1;
}
return 0;
}
return 0;
});
//console.log(musicMapArray, totalObj)
return answer;
}
두번째 시도. (틀린 답안)
런타임 에러 났다.
function solution(genres, plays) {
var answer = [];
var totalObj = {};
var musicObjObj = {};
for(var i = 0 ; i < genres.length ; i ++){
var musicObj = {};
musicObj['number'] = i;
musicObj['count'] = plays[i];
musicObjObj[genres[i]] ? musicObjObj[genres[i]].push(musicObj) : musicObjObj[genres[i]] = [musicObj];
totalObj[genres[i]] = totalObj[genres[i]] ? totalObj[genres[i]] + plays[i] : plays[i];
//musicMapArray.push(musicObj);
}
//console.log(musicObjObj, totalObj)
Object.keys(musicObjObj).forEach(key => {
musicObjObj[key].sort(function (a, b) {
if (a.count > b.count) {
return -1;
}
if (a.count < b.count ) {
return 1;
}
return 0;
});
});
var totalObjArray = Object.entries(totalObj);
totalObjArray.sort(function (a, b) {
if (a[1] > b[1]) {
return -1;
}
if (a[1] < b[1]) {
return 1;
}
return 0;
});
//console.log(musicObjObj)
//console.log(totalObjArray)
for(var i = 0 ; i < totalObjArray.length ; i++){
for(var j = 0 ; j < 2 ; j++){
//console.log(totalObjArray[i][0])
answer.push(musicObjObj[totalObjArray[i][0]][j].number)
}
}
return answer;
}
세번째 시도. (정답)
이전 답안과 큰 차이가 없다.
런타임 에러는 array index 문제일 확률이 높아 빼먹은 조건이 없는지 리뷰했고
장르별 음악이 1개만 있을 수도 있음을 확인해 해당 처리를 하니 잘 됐다.
//1~2시간 소요
function solution(genres, plays) {
var answer = [];
var totalObj = {};
var musicObjObj = {};
for(var i = 0 ; i < genres.length ; i ++){
var musicObj = {};
musicObj['number'] = i;
musicObj['count'] = plays[i];
musicObjObj[genres[i]] ? musicObjObj[genres[i]].push(musicObj) : musicObjObj[genres[i]] = [musicObj];
totalObj[genres[i]] = totalObj[genres[i]] ? totalObj[genres[i]] + plays[i] : plays[i];
//musicMapArray.push(musicObj);
}
console.log(musicObjObj, totalObj)
Object.keys(musicObjObj).forEach(key => {
musicObjObj[key].sort(function (a, b) {
if (a.count > b.count) {
return -1;
}
if (a.count < b.count ) {
return 1;
}
return 0;
});
});
var totalObjArray = Object.entries(totalObj);
totalObjArray.sort(function (a, b) {
if (a[1] > b[1]) {
return -1;
}
if (a[1] < b[1]) {
return 1;
}
return 0;
});
console.log(musicObjObj)
console.log(totalObjArray)
for(var i = 0 ; i < totalObjArray.length ; i++){
for(var j = 0 ; j < 2 ; j++){
//console.log(totalObjArray[i][0])
if(totalObjArray[i][0] && musicObjObj[totalObjArray[i][0]][j]){ //이처리를 안 해줘서 runtime error났는데 장르에 속한 곡이 하나인 경우 조건을 보고 2loop를 돌린 때를 체크
answer.push(musicObjObj[totalObjArray[i][0]][j].number)
}
}
}
return answer;
}
'알고리즘' 카테고리의 다른 글
(프로그래머스)(자바스크립트) 괄호 회전하기 (0) | 2021.07.09 |
---|---|
(프로그래머스)(자바스크립트)파일명 정렬 (0) | 2021.07.09 |
(프로그래머스)(자바) 위장 (0) | 2021.07.07 |
(프로그래머스)(자바) H-Index (0) | 2021.07.07 |
(프로그래머스)(자바) 다리를 지나는 트럭 (0) | 2021.07.07 |
Comments