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 +### 문제 설명 +

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다.

+
    +
  1. 속한 노래가 많이 재생된 장르를 먼저 수록합니다.
  2. +
  3. 장르 내에서 많이 재생된 노래를 먼저 수록합니다.
  4. +
  5. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.
  6. +
+

노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요.

+
제한사항
+ +
입출력 예
+ + + + + + + + + + + + + +
genresplaysreturn
["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(); +}