Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

csct3434

[level 3] 베스트앨범 - 42579 본문

프로그래머스

[level 3] 베스트앨범 - 42579

csct3434 2024. 3. 17. 15:50

문제 링크

 

프로그래머스

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

programmers.co.kr

import java.util.*;
import java.util.Map.*;
import java.util.stream.Collectors;

class Solution {

    public int[] solution(String[] genres, int[] plays) {
        HashMap<String, List<int[]>> category = new HashMap<>();
        HashMap<String, Integer> count = new HashMap<>();

        for (int i = 0; i < genres.length; i++) {
            String genre = genres[i];
            if (!category.containsKey(genre)) {
                category.put(genre, new LinkedList<>());
            }
            category.get(genre).add(new int[]{i, plays[i]});
            count.put(genre, count.getOrDefault(genre, 0) + plays[i]);
        }

        List<Entry<String, Integer>> countEntries = new LinkedList<>(count.entrySet());
        countEntries.sort((a, b) -> b.getValue() - a.getValue());

        List<Integer> answer = new LinkedList<>();
        for (Entry<String, Integer> entry : countEntries) {
            List<int[]> list = category.get(entry.getKey());
            list.sort((a, b) -> a[1] == b[1] ? a[0] - b[0] : b[1] - a[1]);
            answer.addAll(list.stream().limit(2).map(x -> x[0]).collect(Collectors.toList()));
        }
        return answer.stream().mapToInt(i -> i).toArray();
    }
}