728x90
코딩테스트 연습 - 베스트앨범 | 프로그래머스 스쿨 (programmers.co.kr)
난이도 : Level 3
풀이 과정 :
문제 자체는 별다른 알고리즘 없이 구현하는 문제라고 생각해 난이도가 쉽다고 생각했는데,
거의 1시간을 잡아먹으면서 풀었다.. 나중에 보니 level3문제
이 문제는 주어진 입력을 가지고 적절한 자료구조를 이용해 잘 정렬하여 return 해주면 되는 문제다.
배열을 이용해서 푼다면 전체 순회가 굉장히 많아지기에 성능을 생각하여 해시테이블 자료구조를 이용하였다.
문제를 풀고 남들은 어떻게 푸나 봤는데... 정말 깔끔하게 풀어서 감탄했다..
다들 문제 풀고 남들 코드 보는걸 추천함
코드 :
function solution(genres, plays) {
var answer = [];
let table = new Map();
let arr = [];
for(let i=0;i<genres.length;i++){
let genre = genres[i];
let num = plays[i];
let now = table.get(genre);
if(now === undefined) now = [0, []];
// 삽입시 없을 경우 대비에 위 형태로 set 해준다.
now[0] = now[0] + num;
now[1].push([num, i]);
table.set(genre, now);
}
// 코드 이해를 위한 table 형태
// Map(2) {
// 'classic' => [ 1450, [ [500, 0], [150, 2], [800, 3] ] ],
// 'pop' => [ 3100, [ [600, 1], [2500, 4] ] ]
// }
table = [...table]; // map을 array로 바꿔준다.
table.sort((a,b) => b[1][0] - a[1][0]);
for(e of table){
e[1][1].sort((a,b) => {
if(a[0] === b[0]) return a[1]-b[1];
else return b[0]-a[0];
})
}
for(e of table){
let cnt = 0;
for(ele of e[1][1]){
if(cnt === 2) break;
answer.push(ele[1]);
cnt++;
}
}
return answer;
}
728x90
'Algorithm > Solution' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 (JavaScript) (0) | 2022.10.21 |
---|---|
[프로그래머스] 가장 먼 노드(JavaScirpt) (0) | 2022.10.21 |
[프로그래머스] 프린터(JavaScript) (0) | 2022.10.20 |
[백준] 4179 불!(C++) (2) | 2022.09.30 |
[백준] 1406 에디터(C++) (0) | 2022.09.20 |