42579. ๋ฒ ์คํธ ์จ๋ฒ
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋ฒ ์คํธ์จ๋ฒ
| ๋ฌธ์ ์ ํ | ๋์ด๋ | ๊ฑธ๋ฆฐ ์๊ฐ | ํด๊ฒฐ ์ ๋ฌด(โ /โ) |
|---|---|---|---|
| ํด์ | lv.3 | 1์๊ฐ | โ |
์ค๊ณ ๋ฐฉ๋ฒ#
genresย ๋ฅผ ์ํํ๋ฉด์,ยgenres์ยplays์ยindex๊ฐ ๊ฐ์ผ๋ฏ๋ก, ์ฅ๋ฅด๋ณ๋ก ยfirst,ยsecond,ยsum์ ๊ธฐ๋กํยhashMapย ์ ๊ตฌ์ฑํ๋ค.hashMap์ยvalues๋ฅผยsum์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ดํ, ์ํํ๋ฉฐ ์ฅ๋ฅด๋ณ ยfirst,ยsecond๋ก ์จ๋ฒ์ ๊ตฌ์ฑํ๋ค.
์ฝ๋#
function solution(genres, plays) { const hashMap = genres.reduce((hash, genre, i) => { if (hash.has(genre)) { const info = hash.get(genre); if (plays[info.first] < plays[i]) { info.second = info.first; info.first = i; } else if (info.second === null || plays[info.second] < plays[i]) { info.second = i; } info.sum += plays[i]; } else { hash.set(genre, { first: i, second: null, sum: plays[i], }); } return hash; }, new Map());
return [...hashMap.values()] .sort((a, b) => b.sum - a.sum) .reduce( (album, genre) => genre.second === null ? [...album, genre.first] : [...album, genre.first, genre.second], [], );}์๊ฐ ๋ณต์ก๋#
hashMap ๊ตฌ์ฑ : O(N)
hashMap ์ ๋ ฌ : O(NlogN)
hashMap ์ํ: O(N)
์ด๋ ค์ ๋ ์ #
์ฅ๋ฅด๋ณย
secondย ๊ฐ ์์ ์ ์๋ค๋ ์ ์ ๋ํ ์์ธ ์ฒ๋ฆฌhashMap์ยvalue๊ฐ ๊ฐ์ฒด์ผ ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ๋๋ ex)ยhash.get(genre).first