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