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