์ฝ๋๊ฐ ์กฐ๊ธ ์ฅํฉํ๋ค, ๋์ค์ ์๊ฐ์ ๊ฐ๊ณ ๊ฐ์ ํด์ ์คํ์๋ ์ฐจ์ด๋ฅผ ํ์ธํ๊ณ ์ถ์

๋ฌธ์ ์ค๋ช
์คํธ๋ฆฌ๋ฐ ์ฌ์ดํธ์์ ์ฅ๋ฅด ๋ณ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์๋ ๋ ธ๋๋ฅผ ๋ ๊ฐ์ฉ ๋ชจ์ ๋ฒ ์คํธ ์จ๋ฒ์ ์ถ์ํ๋ ค ํฉ๋๋ค. ๋ ธ๋๋ ๊ณ ์ ๋ฒํธ๋ก ๊ตฌ๋ถํ๋ฉฐ, ๋ ธ๋๋ฅผ ์๋กํ๋ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ํ ๋
ธ๋๊ฐ ๋ง์ด ์ฌ์๋ ์ฅ๋ฅด๋ฅผ ๋จผ์  ์๋กํฉ๋๋ค.
์ฅ๋ฅด ๋ด์์ ๋ง์ด ์ฌ์๋ ๋
ธ๋๋ฅผ ๋จผ์  ์๋กํฉ๋๋ค.
์ฅ๋ฅด ๋ด์์ ์ฌ์ ํ์๊ฐ ๊ฐ์ ๋
ธ๋ ์ค์์๋ ๊ณ ์  ๋ฒํธ๊ฐ ๋ฎ์ ๋
ธ๋๋ฅผ ๋จผ์  ์๋กํฉ๋๋ค.
๋
ธ๋์ ์ฅ๋ฅด๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด genres์ ๋
ธ๋๋ณ ์ฌ์ ํ์๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด plays๊ฐ ์ฃผ์ด์ง ๋, ๋ฒ ์คํธ ์จ๋ฒ์ ๋ค์ด๊ฐ ๋
ธ๋์ ๊ณ ์  ๋ฒํธ๋ฅผ ์์๋๋ก return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ์ฌํญ
genres[i]๋ ๊ณ ์ ๋ฒํธ๊ฐ i์ธ ๋
ธ๋์ ์ฅ๋ฅด์
๋๋ค.
plays[i]๋ ๊ณ ์ ๋ฒํธ๊ฐ i์ธ ๋
ธ๋๊ฐ ์ฌ์๋ ํ์์
๋๋ค.
genres์ plays์ ๊ธธ์ด๋ ๊ฐ์ผ๋ฉฐ, ์ด๋ 1 ์ด์ 10,000 ์ดํ์
๋๋ค.
์ฅ๋ฅด ์ข
๋ฅ๋ 100๊ฐ ๋ฏธ๋ง์
๋๋ค.
์ฅ๋ฅด์ ์ํ ๊ณก์ด ํ๋๋ผ๋ฉด, ํ๋์ ๊ณก๋ง ์ ํํฉ๋๋ค.
๋ชจ๋  ์ฅ๋ฅด๋ ์ฌ์๋ ํ์๊ฐ ๋ค๋ฆ
๋๋ค.
์ ์ถ๋ ฅ ์
genres	plays	return
["classic", "pop", "classic", "classic", "pop"][500, 600, 150, 800, 2500]	[4, 1, 3, 0]
์ ์ถ๋ ฅ ์ ์ค๋ช
classic ์ฅ๋ฅด๋ 1,450ํ ์ฌ์๋์์ผ๋ฉฐ, classic ๋ ธ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ณ ์  ๋ฒํธ 3: 800ํ ์ฌ์
๊ณ ์  ๋ฒํธ 0: 500ํ ์ฌ์
๊ณ ์  ๋ฒํธ 2: 150ํ ์ฌ์
pop ์ฅ๋ฅด๋ 3,100ํ ์ฌ์๋์์ผ๋ฉฐ, pop ๋
ธ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ณ ์  ๋ฒํธ 4: 2,500ํ ์ฌ์
๊ณ ์  ๋ฒํธ 1: 600ํ ์ฌ์
๋ฐ๋ผ์ pop ์ฅ๋ฅด์ [4, 1]๋ฒ ๋
ธ๋๋ฅผ ๋จผ์ , classic ์ฅ๋ฅด์ [3, 0]๋ฒ ๋
ธ๋๋ฅผ ๊ทธ๋ค์์ ์๋กํฉ๋๋ค.
์ฝ๋
function solution(genres, plays) {
    const musicInfo = []
    const sumGenres = {}
    const countTwo = {}
    // ์์
์ id, ์ฅ๋ฅด, ์ฌ์ ์ ๋ฅผ ํ๋ฒ์ ๋ชจ์ ๋ฐฐ์ด๊ฐ์ฒด ์์ฑ
    for(let i = 0 ; i < genres.length; i ++) {
        musicInfo.push({
            id: i,
            genres: genres[i],
            plays: plays[i]
        })
    }
    
    // ์ฅ๋ฅด๋ฅผ key ๊ฐ์ผ๋ก ๊ฐ๋ object๋ฅผ ์์ฑํด ํ์์ดํฉ์ผ๋ก ์ฐ์ ์์๋ฅผ ์ ์ธํ  ๊ฐ์ฒด ์์ฑ
    musicInfo.forEach(info => {
        if(sumGenres[info.genres] !== undefined) {
            sumGenres[info.genres]+=info.plays
        } else {
            sumGenres[info.genres] = info.plays   
        }
    })
    
    // ์ฅ๋ฅด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ณ  ์ฅ๋ฅด๊ฐ ๊ฐ๋ค๋ฉด ์ฌ์ ํ์๋ก ์ ๋ ฌ
    musicInfo.sort((prevMusic,curMusic) => {
        
        if(sumGenres[prevMusic.genres] > sumGenres[curMusic.genres]) {
            return -1
        } else if (sumGenres[prevMusic.genres] === sumGenres[curMusic.genres]) {
            if(prevMusic.plays > curMusic.plays) {
                return -1
            } else if (prevMusic.plays === curMusic.plays) {
                return 0
            } else {
                return 1
            }
        } else {
            return 1
        }
    })
    
    // ๋์จ ๊ฒฐ๊ณผ๋ฌผ์์ ์ฅ๋ฅด ๋ณ 2๊ฐ๊น์ง๋ง ์ถ๋ ฅ
    return musicInfo.map(info => {
        if(countTwo[info.genres] !== undefined) {
            countTwo[info.genres]++
        } else {
             countTwo[info.genres] = 1
        }
        if(countTwo[info.genres] <= 2) {
            return info.id
        }
    }).filter(idx => idx !== undefined)
}