[프로그래머스] 베스트 앨범 자바 풀이

2024. 3. 25. 09:29·알고리즘

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42579?language=java

풀이

  1. 속한 노래가 많이 재생된 장르를 먼저 수록합니다.
  2. 장르 내에서 많이 재생된 노래를 먼저 수록합니다.
  3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.

• 장르에 속한 곡이 하나라면, 하나의 곡만 선택합니다.

이 조건들을 위주로 생각하여 문제를 풀었다.

우선, 장르, 재생횟수, 인덱스를 저장하기 위해 Triple이라는 자료구조를 하나 만들어줬다.

또한, 장르별 재생횟수를 저장하기 위해 Pair 자료구조와 함께 HashMap을 사용했다.

Triple 자료구조를 저장하는 list에 모든 데이터를 담고, 이 후 재생횟수 순서대로 Triple을 정렬시켜줬다.

이후 이중 for문을 통해 장르별 최대 두개의 곡을 선택한다. 횟수가 2회가 되면 반복문을 종료하게 했다. 이로써 장르에 곡이 1개인 경우 해당 인덱스를 하나만 추가하게 된다.

list 자료구조에 담은 데이터를 배열로 변환하여 리턴하면 끝

코드

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

class Solution {
         class Pair<T,V> {
        T first;
        V second;

        public Pair(T first, V second) {
            this.first = first;
            this.second = second;
        }
    }
    class Triple<T,K,V> {
        T first;
        K second;
        V third;

        public Triple(T first, K second, V third) {
            this.first = first;
            this.second = second;
            this.third = third;
        }
    }
    public int[] solution(String[] genres, int[] plays) {
        int[] answer = {};
        HashMap<String, Integer> map = new HashMap<>();
        ArrayList<Triple<Integer, String, Integer>> list = new ArrayList<>();
        ArrayList<Pair<String, Integer>> arrayList = new ArrayList<>();
        ArrayList<Integer> ans = new ArrayList<>();
        for (int i = 0; i < genres.length; i++) {
            map.put(genres[i], map.getOrDefault(genres[i], 0) + plays[i]);
            list.add(new Triple(i, genres[i], plays[i]));
        }
        map.forEach((s, i) -> {
            arrayList.add(new Pair(s,i));
        });
        Collections.sort(list, new Comparator<Triple<Integer, String, Integer>>() {
            @Override
            public int compare(Triple<Integer, String, Integer> o1,
                Triple<Integer, String, Integer> o2) {
                return o2.third - o1.third;
            }
        });

        Collections.sort(arrayList, new Comparator<Pair<String, Integer>>() {
            @Override
            public int compare(Pair<String, Integer> o1, Pair<String, Integer> o2) {
                return o2.second-o1.second;
            }
        });
        int idx = 0;
        for (int i = 0; i < arrayList.size(); i++) {
            String s = arrayList.get(i).first;
            int cnt = 0;
            for (int j = 0; j < list.size(); j++) {
                if (cnt == 2) break;
                if (list.get(j).second.equals(s)) {
                    ans.add(list.get(j).first);
                    cnt++;
                }
            }
        }
        answer = new int[ans.size()];
        for (int i = 0; i < ans.size(); i++) {
            answer[i] = ans.get(i);
        }
        return answer;
    }
}

'알고리즘' 카테고리의 다른 글

[프로그래머스] 광물 캐기 자바 풀이  (5) 2025.11.04
[프로그래머스] 과제 진행하기 자바 풀이  (2) 2025.11.03
[프로그래머스] 게임 맵 최단거리 자바 풀이  (0) 2024.03.21
[프로그래머스] 메뉴 리뉴얼 자바 풀이  (0) 2024.03.20
[프로그래머스] PCCP 기출문제 4번 / 수레 움직이기 자바 풀이  (0) 2024.03.15
'알고리즘' 카테고리의 다른 글
  • [프로그래머스] 광물 캐기 자바 풀이
  • [프로그래머스] 과제 진행하기 자바 풀이
  • [프로그래머스] 게임 맵 최단거리 자바 풀이
  • [프로그래머스] 메뉴 리뉴얼 자바 풀이
HWBB
HWBB
흥미주도개발자
  • HWBB
    코딩공부방
    HWBB
  • 전체
    오늘
    어제
    • 분류 전체보기 (170) N
      • 알고리즘 (66)
      • Android (27)
      • Kotlin (0)
      • Java (2)
      • Design Pattern (2)
      • React Native (1)
      • Python (0)
      • TIL (21)
      • Unity (0)
      • React (2)
      • AWS (0)
      • Git (11)
      • MFC (1)
      • Spring (5) N
      • Computer Science (4)
      • Vue (4)
      • Infra (6)
      • 박현우 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 승윤이
  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    깃허브
    Android
    AWS
    github
    android studio
    Java
    coding
    알고리즘
    백준
    algorithm
    GIT
    baekjoon
    코딩테스트
    Kotlin
    안드로이드 스튜디오
    코틀린
    안드로이드
    자바
    programmers
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
HWBB
[프로그래머스] 베스트 앨범 자바 풀이
상단으로

티스토리툴바