1
+ //https://github.com/codeisneverodd/programmers-coding-test
2
+ //완벽한 정답이 아닙니다.
3
+ //정답 1 - codeisneverodd
4
+ function solution ( genres , plays ) {
5
+ var answer = [ ] ;
6
+ const songs = [ ]
7
+ const genreSumHash = { }
8
+ const genreSumArr = [ ]
9
+
10
+ //고유번호, 장르, 플레이수를 담은 songs
11
+ genres . forEach ( ( genre , id ) => {
12
+ songs . push ( { id : id , genre : genre , play : plays [ id ] } )
13
+ genreSumHash [ genre ] = genreSumHash [ genre ] === undefined ? plays [ id ] : genreSumHash [ genre ] + plays [ id ]
14
+ } )
15
+
16
+ //장르별 플레이수 합으로 정렬하기 위해 생성한 배열 genreSumArr
17
+ for ( const genre in genreSumHash ) genreSumArr . push ( [ genre , genreSumHash [ genre ] ] )
18
+ genreSumArr . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] )
19
+
20
+ //각 장르안에서 각 노래의 play수가 높은 순으로 정렬하고 앞에서부터 2개까지 정답에 고유번호를 push
21
+ for ( const genre of genreSumArr ) {
22
+ const sorted = songs . filter ( song => song . genre === genre [ 0 ] ) . sort ( ( a , b ) => b . play - a . play )
23
+ for ( let i = 0 ; i < 2 && i < sorted . length ; i ++ ) answer . push ( sorted [ i ] . id )
24
+ }
25
+ return answer ;
26
+ }
27
+
28
+ //정답 2 - codeisneverodd
29
+ //Map과 고차함수를 적극적으로 이용한 풀이
30
+ function solution ( genres , plays ) {
31
+ const genreMap = new Map ( ) ; // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...] }
32
+ genres
33
+ . map ( ( genre , id ) => [ genre , plays [ id ] ] )
34
+ . forEach ( ( [ genre , play ] , id ) => {
35
+ const data = genreMap . get ( genre ) || { totalPlay : 0 , songs : [ ] }
36
+ genreMap . set ( genre , {
37
+ totalPlay : data . totalPlay + play ,
38
+ songs : [ ...data . songs , { play : play , id : id } ]
39
+ . sort ( ( a , b ) => b . play - a . play )
40
+ . slice ( 0 , 2 )
41
+ } )
42
+ } )
43
+
44
+ return [ ...genreMap . entries ( ) ] //entries => [[genre, {totalPlay, songs}], ...]
45
+ . sort ( ( a , b ) => b [ 1 ] . totalPlay - a [ 1 ] . totalPlay )
46
+ . flatMap ( item => item [ 1 ] . songs ) // [[songs], [songs]] => [songs, songs]
47
+ . map ( song => song . id )
48
+ }
0 commit comments