์ฝ”๋“œ๊ฐ€ ์กฐ๊ธˆ ์žฅํ™ฉํ–ˆ๋‹ค, ๋‚˜์ค‘์— ์‹œ๊ฐ„์„ ๊ฐ–๊ณ  ๊ฐœ์„ ํ•ด์„œ ์‹คํ–‰์†๋„ ์ฐจ์ด๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ์Œ

๋ฌธ์ œ์„ค๋ช…

์ŠคํŠธ๋ฆฌ๋ฐ ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฅด ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ์”ฉ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋…ธ๋ž˜๋ฅผ ์ˆ˜๋กํ•˜๋Š” ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์†ํ•œ ๋…ธ๋ž˜๊ฐ€ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
์žฅ๋ฅด ๋‚ด์—์„œ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
์žฅ๋ฅด ๋‚ด์—์„œ ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋…ธ๋ž˜ ์ค‘์—์„œ๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
๋…ธ๋ž˜์˜ ์žฅ๋ฅด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด 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)
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€