안녕하세요! 오늘은 프로그래머스 플랫폼(https://school.programmers.co.kr/) 에서 자바스크립트(JavaScript)를 활용하여 코딩테스트를 해보고 해설을 해보는 시간을 가지고자 합니다.
이번에 진행할 코딩테스트는 아래와 같습니다.
[프로그래머스 자바스크립트 코딩테스트 베스트앨범 내용]
[프로그래머스 자바스크립트 코딩테스트 베스트앨범 해설]
function solution(genres, plays) {
const songsByGenre = {};
const totalPlaysByGenre = {};
const n = genres.length;
// 장르별 노래 목록과 재생횟수 합계 계산
for (let i = 0; i < n; i++) {
const genre = genres[i];
const playsForSong = plays[i];
if (!songsByGenre[genre]) {
songsByGenre[genre] = [];
totalPlaysByGenre[genre] = 0;
}
songsByGenre[genre].push({ id: i, plays: playsForSong });
totalPlaysByGenre[genre] += playsForSong;
}
// 재생횟수 합계가 높은 장르순으로 정렬
const sortedGenres = Object.keys(totalPlaysByGenre).sort((a, b) => {
return totalPlaysByGenre[b] - totalPlaysByGenre[a];
});
const answer = [];
// 재생횟수 합계가 높은 장르부터, 각 장르별로 노래 두 개씩 선택
sortedGenres.forEach((genre) => {
const songs = songsByGenre[genre];
// 노래가 하나밖에 없는 경우
if (songs.length === 1) {
answer.push(songs[0].id);
} else {
// 노래가 두 개 이상인 경우, 재생횟수가 많은 순으로 정렬하고 먼저 두 개 선택
songs.sort((a, b) => {
return b.plays - a.plays;
});
answer.push(songs[0].id);
answer.push(songs[1].id);
}
});
return answer;
}
스트리밍 사이트에서 베스트 앨범을 출시하기 위해서는, 장르별로 가장 많이 재생된 노래를 두 개씩 골라야 합니다. 이 때 고유번호가 작은 노래를 먼저 수록해야 합니다. 이를 위해 우선 각 장르별 재생횟수를 더하고, 이를 내림차순으로 정렬합니다. 그 후, 각 장르별로 재생횟수가 많은 노래를 먼저 두 개씩 고르고, 이를 고유번호순으로 정렬합니다.
주어진 조건에 따라 베스트 앨범에 수록될 노래의 고유 번호를 찾아내야 합니다. 이를 위해 노래의 재생 횟수와 장르 정보를 바탕으로 각 장르의 노래들을 재생 횟수에 따라 내림차순으로 정렬하고, 재생 횟수가 같은 경우 고유 번호를 오름차순으로 정렬합니다. 그리고 각 장르당 두 개씩의 노래를 선택하여 베스트 앨범에 추가합니다. 우선 genres와 plays 배열을 묶어서 genrePlayList라는 객체 배열을 만듭니다. 이 객체 배열은 각 노래의 재생 횟수와 장르 정보를 저장합니다. 그리고 genreCount라는 객체를 만들어 각 장르가 몇 번 재생되었는지 카운트합니다. 이후에 genreCount 객체를 내림차순으로 정렬하여 가장 많이 재생된 장르부터 처리하며, 각 장르당 노래 리스트를 내림차순으로 정렬합니다. 그리고 각 장르당 최대 두 개의 노래를 선택하여 answer 배열에 추가합니다. 이때, 노래 리스트가 하나인 경우에는 해당 노래를 선택합니다. 마지막으로 answer 배열을 반환합니다.
'IT > JavaScript' 카테고리의 다른 글
자바스크립트로 영어를 한글 타자로 변환하는 방법 (2) | 2023.08.19 |
---|---|
다양한 암호화 방식을 감지하는 자바스크립트 코드 작성하기 (1) | 2023.08.19 |
프로그래머스 자바스크립트 코딩테스트(정수 나누기 반환) (0) | 2023.04.11 |
자바스크립트로 하는 코딩테스트(나머지 구하기) (0) | 2023.04.11 |
초보자를 위한 자바스크립트 함수 예제와 함께 자세히 알아보기 (0) | 2023.03.31 |