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

lhs's avatar
Dec 23, 2024
[프로그래머스] 베스트앨범(42579)
 

1. 문제 풀이 아이디어

  • 클래스를 만들어 문제에 제시된 기준으로 정렬을 한다.
  • 정렬된 리스트에서 각 장르별로 두 곡만 선택해 리스트를 만들면 문제를 해결할 수 있다..

2. 나의 정답 코드

class Solution { public int[] solution(String[] genres, int[] plays) { List<Integer> resultList = new ArrayList<>(); List<Music> musicList = new ArrayList<>(); Map<String, Integer> playMap = new HashMap<>(); for (int i = 0; i < genres.length; i++) { musicList.add(new Music(i, genres[i], plays[i])); playMap.put(genres[i], playMap.getOrDefault(genres[i], 0) + plays[i]); } musicList.sort((o1, o2) -> { if (playMap.get(o1.genre).equals(playMap.get(o2.genre))) { if (o1.play == o2.play) { return o1.index - o2.index; } return o2.play - o1.play; } return playMap.get(o2.genre) - playMap.get(o1.genre); }); Map<String, Integer> countMap = new HashMap<>(); for (int i = 0; i < musicList.size(); i++) { String genre = musicList.get(i).genre; if (countMap.getOrDefault(genre, 0) == 2) { continue; } countMap.put(genre, countMap.getOrDefault(genre, 0) + 1); resultList.add(musicList.get(i).index); } return resultList.stream().mapToInt(i -> i).toArray(); } } class Music { int index; String genre; int play; Music(int index, String genre, int play) { this.index = index; this.genre = genre; this.play = play; } }

3. 정리

  • Music 객체를 생성하여 곡 정보를 관리한다.
  • Map을 활용해 장르별 총 재생 횟수를 계산하고 저장한다.
  • 곡 리스트를 정렬하여 장르별 총 재생 횟수가 높은 순, 개별 재생 횟수가 높은 순, 인덱스가 작은 순으로 정렬한다.
  • 정렬된 리스트에서 Map을 활용하여 각 장르별 최대 두 곡까지 선택해 결과를 생성한다.
  • 최종적으로 선택된 곡의 인덱스를 배열로 반환한다.
Share article

LHS's Study Space