DevLog:-)

[프로그래머스][JavaScript]베스트앨범 본문

알고리즘/프로그래머스

[프로그래머스][JavaScript]베스트앨범

hyeon200 2023. 9. 25. 18:38
반응형

문제 

베스트앨범

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(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)
        })
    })
    console.log([...genreMap.entries()]);
    return [...genreMap.entries()]
        .sort((a,b)=>b[1].total - a[1].total)
        .flatMap(item => item[1].songs)
        .map(song => song.index)
}

 

✅check point

arr.map((p,i) => p) 각각의 요소에 호출해서 그 값을 변환할 수 있게 해줌
arr.forEach((p,i)=>{console.log(p);}) 배열 순
Map.prototype.get()

-Map 객체에서 특정 요소를 반환
ex)
const map1 = new Map();
map1.set('bar', 'foo');

console.log(map1.get('bar'));
// Expected output: "foo"
Map.prototype.entries() - 반복자 객체를 반환
-객체에는 
Map 객체의 각 요소에 대한 [key, value] 쌍이 삽입 순서대로 포함됨
ex)
const map1 = new Map();

map1.set('0', 'foo');
map1.set(1, 'bar');

const iterator1 = map1.entries();

console.log(iterator1.next().value);
// Expected output: Array ["0", "foo"]

console.log(iterator1.next().value);
// Expected output: Array [1, "bar"]
arr.flatMap() -flatMap() 메서드는 배열의 각 요소에 주어진 콜백 함수를 적용한 다음 그 결과를 한 단계씩 평탄화하여 형성된 새 배열을 반환
ex)
const arr1 = [1, 2, 1];

const result = arr1.flatMap((num) => (num === 2 ? [2, 2] : 1));

console.log(result);
// Expected output: Array [1, 2, 2, 1]

+map과의 차이 
const arr1 = [1, 2, 1];

const result = arr1.map((num) => (num === 2 ? [2, 2] : 1));

console.log(result);
// Expected output: Array [1, [2, 2], 1]

 

💡idea 

요구사항 1.같은 장르끼리 묶기 (map)
2.묶인 노래들을 재생 순으로 정렬하기 (sort)
3.노래를 2개개씩 자르기 (slice)
반응형