์ฝ๋๊ฐ ์กฐ๊ธ ์ฅํฉํ๋ค, ๋์ค์ ์๊ฐ์ ๊ฐ๊ณ ๊ฐ์ ํด์ ์คํ์๋ ์ฐจ์ด๋ฅผ ํ์ธํ๊ณ ์ถ์
๋ฌธ์ ์ค๋ช
์คํธ๋ฆฌ๋ฐ ์ฌ์ดํธ์์ ์ฅ๋ฅด ๋ณ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์๋ ๋ ธ๋๋ฅผ ๋ ๊ฐ์ฉ ๋ชจ์ ๋ฒ ์คํธ ์จ๋ฒ์ ์ถ์ํ๋ ค ํฉ๋๋ค. ๋ ธ๋๋ ๊ณ ์ ๋ฒํธ๋ก ๊ตฌ๋ถํ๋ฉฐ, ๋ ธ๋๋ฅผ ์๋กํ๋ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ํ ๋
ธ๋๊ฐ ๋ง์ด ์ฌ์๋ ์ฅ๋ฅด๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
์ฅ๋ฅด ๋ด์์ ๋ง์ด ์ฌ์๋ ๋
ธ๋๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
์ฅ๋ฅด ๋ด์์ ์ฌ์ ํ์๊ฐ ๊ฐ์ ๋
ธ๋ ์ค์์๋ ๊ณ ์ ๋ฒํธ๊ฐ ๋ฎ์ ๋
ธ๋๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
๋
ธ๋์ ์ฅ๋ฅด๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด 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)
}