From 7d1f47805066998b79bc9c06d20a9faef0108568 Mon Sep 17 00:00:00 2001
From: areumH <94692566+areumH@users.noreply.github.com>
Date: Wed, 5 Feb 2025 23:12:04 +0900
Subject: [PATCH] =?UTF-8?q?[42579]=20=EB=B2=A0=EC=8A=A4=ED=8A=B8=EC=95=A8?=
=?UTF-8?q?=EB=B2=94?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
programmers/lv3/42579/README.md | 60 +++++++++++++++++++++++++++++++++
programmers/lv3/42579/areumH.js | 34 +++++++++++++++++++
2 files changed, 94 insertions(+)
create mode 100644 programmers/lv3/42579/README.md
create mode 100644 programmers/lv3/42579/areumH.js
diff --git a/programmers/lv3/42579/README.md b/programmers/lv3/42579/README.md
new file mode 100644
index 0000000..c8b8bdf
--- /dev/null
+++ b/programmers/lv3/42579/README.md
@@ -0,0 +1,60 @@
+# [level 3] 베스트앨범 - 42579
+[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42579)
+### 성능 요약
+메모리: 33.4 MB, 시간: 1.25 ms
+### 구분
+코딩테스트 연습 > 해시
+### 채점결과
+정확성: 100.0
합계: 100.0 / 100.0
+### 제출 일자
+2025년 02월 05일 21:31:23
+### 문제 설명
+
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다.
+노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요.
+| genres | +plays | +return | +
|---|---|---|
| ["classic", "pop", "classic", "classic", "pop"] | +[500, 600, 150, 800, 2500] | +[4, 1, 3, 0] | +
classic 장르는 1,450회 재생되었으며, classic 노래는 다음과 같습니다.
+pop 장르는 3,100회 재생되었으며, pop 노래는 다음과 같습니다.
+따라서 pop 장르의 [4, 1]번 노래를 먼저, classic 장르의 [3, 0]번 노래를 그다음에 수록합니다.
+※ 공지 - 2019년 2월 28일 테스트케이스가 추가되었습니다.
+> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges diff --git a/programmers/lv3/42579/areumH.js b/programmers/lv3/42579/areumH.js new file mode 100644 index 0000000..9ca66c0 --- /dev/null +++ b/programmers/lv3/42579/areumH.js @@ -0,0 +1,34 @@ +function getGenresCount(genres, plays) { + const genresCount = {}; + + genres.forEach((el, idx) => { + genresCount[el] = (genresCount[el] || 0) + plays[idx][0]; + }); + + return Object.entries(genresCount) + .sort((a, b) => b[1] - a[1]) + .map((el) => el[0]); +} + +function solution(genres, plays) { + let answer = []; + + const indexPlays = plays.map((el, idx) => [el, idx]); + const sortGenres = getGenresCount(genres, indexPlays); + + const genresIndex = sortGenres.map((el) => { + return genres.map((genre, idx) => (el === genre ? idx : -1)).filter((idx) => idx !== -1); + }); + + for (let i = 0; i < genresIndex.length; i++) { + const selected = genresIndex[i].map((idx) => indexPlays[idx]); + answer.push( + selected + .sort((a, b) => b[0] - a[0]) + .slice(0, 2) + .map((el) => el[1]) + ); + } + + return answer.flat(); +}