์ค๋์ ํ, ํด์ ํ ์ด๋ธ, ๊ทธ๋ํ์ ๋ํด์ ๊ณต๋ถํ์๊ณ ๋น์ทํ๊ฒ ๊ตฌํํ๋ ํ์ ๊ทธ๋ํ ๋ฌธ์ ๋ณด๋ค ๋ชจ๋ฒ ๋ต์(๊ฐ์)์ ์ถฉ๊ฒฉ๋จน์๋ ํด์ํ ์ด๋ธ์ ์ง์ค์ ์ผ๋ก ๋ด๋ณด์!
์ถ์ฒ : ํ๋ก๊ทธ๋๋จธ์ค
๋ฒ ์คํธ ์จ๋ฒ
๋ด ๋ต์
function solution(genres, plays) {
const genreObj = {};
for (let i = 0; i < genres.length; i++) {
if (!genreObj.hasOwnProperty(genres[i])) {
genreObj[genres[i]] = {
total: plays[i],
plays: [[i, plays[i]]],
};
} else {
genreObj[genres[i]].total += plays[i];
genreObj[genres[i]].plays.push([i, plays[i]]);
}
}
const sortGenre = [];
for (const genre in genreObj) {
genreObj[genre].plays.sort((a, b) => b[1] - a[1]);
sortGenre.push([genre, genreObj[genre].total, genreObj[genre].plays]);
}
sortGenre.sort((a, b) => b[1] - a[1]);
const bestAlbum = [];
for (const genre of sortGenre) {
genre[2].forEach((val, idx) => {
if (idx < 2) {
bestAlbum.push(val[0]);
}
});
}
return bestAlbum;
}
object๋ฅผ ์ฌ์ฉ
ํ์๊ณ ์ฅ๋ฅด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด total์ ์ด ํ๋ ์ด ์, plays์๋ ์ธ๋ฑ์ค์ ํ๋ ์ด ์๋ฅผ ์ค์ ํ์๋ค.2๊ฐ๊น์ง ์๋ก
ํ ์ ์๊ธฐ ๋๋ฌธ์ idx๊ฐ 2๊ฐ ๋๊ธฐ ์ ๊น์ง์ ๋
ธ๋์ ๋ฒํธ๋ฅผ ๋ฒ ์คํธ ์จ๋ฒ์ ์ถ๊ฐ์์ผฐ๋ค.๋ชจ๋ฒ ๋ต์
function solution2(genres, plays) {
const genreMap = new Map();
genres
.map((genre, index) => [genre, plays[index]])
.forEach(([genre, play], index) => {
const data = genreMap.get(genre) || { total: 0, songs: [] };
genreMap.set(genre, {
total: data.total + play,
songs: [...data.songs, { play, index }]
.sort((a, b) => b.play - a.play)
.slice(0, 2),
});
});
return [...genreMap.entries()]
.sort((a, b) => b[1].total - a[1].total)
.flatMap((item) => item[1].songs)
.map((songs) => songs.index);
}
๐ฑ ํจ์์ ํ์ฉ.. ์ฅ๋์๋๋ค.. ์ถฉ๊ฒฉ์ด๋๊น ๐คฏ
์์งํ ์ฒ์์ ์ ์ด์ ๋๋ฉด ๊ด์ฐฎ๊ฒ ํ์๋ค ๋ผ๊ณ ์๊ฐํ๋๋ฐ..
์ด๊ฒ ๋ญ๋! ์ถฉ๊ฒฉ์ ์ด๋ค..
const data = genreMap.get(genre) || { total: 0, songs: [] };
์ฐ์ ์ด ๋ถ๋ถ! ๋ฌธ์ ํ ๋ ์ฌ์ฉํด ๋ณผ ์๊ฐ์ ์ ํ ํด๋ณด์ง ์์๋ค. if, else
์ Map์์ has
๋ก ์กด์ฌ ํ๋์ง ํ์ธํด์ ์ฝ๋ฉํ์๋๋ฐ..๐ ์ ๋ง ์ต์ํ ๋ฌธ๋ฒ์ธ๋ฐ ์ด๋ ๊ฒ ์ฌ์ฉํ๋ค๋! ์ด์ ๋ค์๋ถํฐ ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ์ ํ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํด๋ด์ผ์ง!๐
return [...genreMap.entries()]
.sort((a, b) => b[1].total - a[1].total)
.flatMap((item) => item[1].songs)
.map((songs) => songs.index);
์ ๋ง ๊น๋ํ ํ์ด ์๋๊ฐ.. [...genreMap.entries()]
Map์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์์ฃผ ์ฌ์ฉํ๊ฒ ๋๋ ๋ฌธ๋ฒ์ด๋ค. ๋ค์์ ๊ผญ ์ฌ์ฉํด๋ด์ผ์ง~
flapMap
์ฒ์ ๋ค์ด๋ณธ ํจ์์ด๋ค. ๊ณ ๋ก ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค.
์ค์ฒฉ๋ ๋ฐฐ์ด ๊ตฌ์กฐ๋ฅผ ์ ํด์ง ๊น์ด๋งํผ ํํํ๊ฒ ๋ง๋ค ์ ์๋ ํจ์์ด๋ค.
๊น์ด์ default๋ 1์ด๋ฉฐ ๋ฐ๋ก ์ง์ ์ด ๊ฐ๋ฅํ๋ค.
const arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]
const arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat(2);
// [1, 2, 3, 4, 5, 6]
const arr3 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr3.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
๋ฐฐ์ด์ ํํํํ๋ flat()์ ๊ธฐ๋ฅ์ map()์ ๊ธฐ๋ฅ์ ํฉ์น ํจ์์ด๋ค.
let arr1 = ["it's Sunny in", "", "California"];
arr1.map(x=>x.split(" "));
// [["it's","Sunny","in"],[""],["California"]]
arr1.flatMap(x => x.split(" "));
// ["it's","Sunny","in","California"]
์ฝ๋ฉํ ์คํธ ์ฐ์ต | ํ๋ก๊ทธ๋๋จธ์ค
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด๋ด์ฅํจ์ ์ ๋ฆฌ (2)
์ง์ง ๊ทธ ๋ฌธ์ ํ๊ณ ์ค์ค๋ก์ ๋ํ ๋ฐ์ฑ์ด ๋ค์์ด์
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ ๋ต๊ฒ ์ฐ๋๊ฑด ์ ๋ฐ๊ฑฐ๊ตฌ๋.. ์ถ์
์ธ์ด๋ฅผ ์ธ ๋๋, ์ธ์ด์ ๋ณธ์ง์ ํ์
ํ๊ณ ํน์ฑ์ ๋ง๊ฒ ์ฌ์ฉํ๋ผ๋ ๋ง์ ๋ง์ด ๋ค์๋๋ฐ,
์ด๋์ ๊ณ ์๋ค์ ์ฝ๋๋ฅผ ๋ง์ด ๋ด์ผ๋๊ตฌ๋- ์ถ์๋ ์๊ฐ์ด์๋ค์...
์์งํ ์ฒ์์ ์ ์ด์ ๋๋ฉด ๊ด์ฐฎ๊ฒ ํ์๋ค <<< ๊ณต๊ฐํ๊ณ ๊ฐ๋๋ค ๐๐