베스트 앨범 (프로그래머스)

Namlulu·2022년 1월 19일
0

알고리즘

목록 보기
14/28
function solution(genres, plays) {
    // 전부 다 담기
    const stack = []
    for (let i = 0; i < genres.length; i++) {
        stack.push({genre: genres[i], score: plays[i], id: i})
    }
    
    // 장르만 담기
    const setOne = []
    for (let i = 0; i < genres.length; i++) {
        if (setOne.includes(genres[i])) {
            continue
        } else {
            setOne.push(genres[i])
        }
    }
    
    // 각 합 구하기
    const setTwo = []
    for (let i = 0; i < setOne.length; i++) {
        const sumOfValue = stack.map((item, index) => {
            if (item.genre === setOne[i]) {
                return item.score
            } else {
                return 0
            }
        }).reduce((a, b) => a + b, 0)
        setTwo.push({genre: setOne[i], sumOfValue})
    }
    
    // 순서 구하기
    const setThree = setTwo.sort((a, b) => b.sumOfValue - a.sumOfValue)
                           .map((item) => item.genre)
    
    // 순서대로 id 삽입하기
    const answer = []
    setThree.forEach((item, index) => {
        const sliceElement = stack.filter((el) => el.genre === item)
                                  .sort((a, b) => b.score  - a.score)
                                  .slice(0, 2)
                                  .map(item => item.id)
        answer.push(...sliceElement)
    })
    
    
    return answer
    
}

=> 어떤 앨범이 가장 합이 높은지 순서를 구해야 했다. 그 순서를 구한 다음 처음 index를 반환해야 한다. 처음에 생각은 했는데, 그냥 구현체나 자료형 고민을 좀 많이 했던 거 같다. Map써도 될 거 같다는 생각??

profile
Better then yesterday

0개의 댓글