[Hash] 베스트앨범

서은경·2022년 4월 6일
0

CodingTest

목록 보기
4/71
public static int[] solution(String[] genres, int[] plays) {
        int[] answer = {};

        // 고유번호, 장르
        HashMap<Integer, String> genre = new HashMap<Integer, String>();
        // 고유번호, 재생횟수
        HashMap<Integer, Integer> play = new HashMap<Integer, Integer>();
        // 장르, 총 재생횟수
        HashMap<String, Integer> playCnt = new HashMap<String, Integer>();

        HashMap<Integer, Integer> result = new HashMap<>();

        for (int i=0; i<genres.length; i++) {
            genre.put(i, genres[i]);
            play.put(i, plays[i]);
        }

        for (Integer key : genre.keySet()) {
            //System.out.println(key + " " + genre.get(key) + " " + play.get(key));
            playCnt.put(genre.get(key), playCnt.getOrDefault(genre.get(key), 0) + play.get(key));
        }

        // Map.Entry 의 내장함수 사용하여 value값 기준 정렬 (오름차순)
        // 내가 필요한건 내림차순
        List<Map.Entry<String, Integer>> entryList = new LinkedList<>(playCnt.entrySet());
        entryList.sort(Map.Entry.comparingByValue());

        for(Map.Entry<String, Integer> entry : entryList){
            //System.out.println(entry.getKey() + " " + entry.getValue());
        }

        // 내림차순 정렬,, 소스 분석은 좀 나중에
        List<Integer> playKeySet = new ArrayList<>(play.keySet());
        Collections.sort(playKeySet, (value1, value2) -> (play.get(value2).compareTo(play.get(value1))));

        List<String> playCntKeySet = new ArrayList<>(playCnt.keySet());
        Collections.sort(playCntKeySet, (value1, value2) -> (playCnt.get(value2).compareTo(playCnt.get(value1))));

//        System.out.println(playCntKeySet);
//        System.out.println(playKeySet);

        int max = 2;
        int cnt = 0;
        int i=0;

        for (String gen : playCntKeySet) {
            cnt = 0;
            for (int id : playKeySet) {
                String g = genre.get(id);
                //System.out.println(g + " " + id + " " + play.get(id)+" "+cnt);
                if (gen.equals(g) && max > cnt) {
                    //System.out.println(cnt + " " + gen + " " + id + " " + play.get(id));
                    result.put(i, id);
                    i++;
                    cnt++;
                } else {
                }

            }
        }

        answer = new int[result.size()];
        for (int idx : result.keySet()) {
            answer[idx] = result.get(idx);
        }

        return answer;
    }

정확도 절반의 실패코드 ... 풀이 참고해서 다시 짜보고 수정해야겠다 흑흑

2022-04-14
풀이 참고 없이 풀었다 !!!!!!! 다시 푼다는걸 까맣게 잊고있었다 공부하려고 알아둔걸 그대로 적어놔서 쓸데없는 소스가 좀 많은데 아무튼..

재생횟수와 먼저나와야할 장르를 내림차순으로 정렬하고 포문을 돌려서 해쉬맵에 담아줬다. 장르가 두개 미만일 경우가 있으므로 장르명이 일치하는지 확인하고 해쉬맵에 우선적으로 담았다.

0개의 댓글

관련 채용 정보