Dev/Programmers

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

마이캣호두 2024. 12. 23. 16:05
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

Review

개인적으로는 조금 귀찮은 문제였던.. 우선 HashMap으로 genres, plays를 매핑해주고, 각각 sort를 해서 정렬해줬다. 그리고 for문이 gen을 도는 동안 genres[i]가 같은 걸 만나면 count++ 해주고 list에 넣어서 get! 이전에 한 번 풀어봤던 문제여서 기억이 나서 비교적 쉽게 풀었는데 나중에는 이렇게 list로 바로 풀 수 있을지 모르겠다. 하하

 

 

Code

import java.util.*;

class Solution {
    public int[] solution(String[] genres, int[] plays) {
        int[] answer = {};
        HashMap<String, Integer> map = new HashMap<>();
        HashMap<Integer, Integer> map2 = new HashMap<>();
        
        for (int i = 0; i < genres.length; i++) {
            map.put(genres[i], map.getOrDefault(genres[i], 0) + plays[i]);
        }
        
        for (int i = 0; i < plays.length; i++) {
            map2.put(i, plays[i]);
        }
        
        List<String> gen = new ArrayList<>(map.keySet());
        gen.sort((g1, g2) -> map.get(g2).compareTo(map.get(g1)));
        
        List<Integer> pl = new ArrayList<>(map2.keySet());
        pl.sort((p1, p2) -> map2.get(p2).compareTo(map2.get(p1)));
        
        List<Integer> list = new ArrayList<>();
        
        for (String s : gen) {
            int count = 1;
            
            for (int i : pl) {
                if (genres[i].equals(s) && count < 3) {
                    count++;
                    list.add(i);
                }
            }
        }
        
        answer = new int[list.size()];
        
        for (int i = 0; i < answer.length; i++) {
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}
반응형