프로그래머스 베스트앨범 자바(java) 풀이
문제 풀이
- 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두개씩 모아 베스트 앨범을 출시하려고 한다.
- 속한 노래가 많이 재생된 장르를 먼저 수록합니다.
- 장르 내에서 많이 재생된 노래를 먼저 수록합니다.
- 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록한다.
- 장르 종류는 100개 미만이다.
- 장르에 속한 곡이 하나라면, 하나의 곡만 선택한다.
- 모든 장르는 재생된 횟수가 다르다. => 같은 재생횟수를 가지지 않는다
문제 풀이
HashMap 자료구조를 이용하여 문제를 풀 수 있습니다. 이 자료구조는 순서가 없으며 key, value로 저장합니다. 중복도 없습니다
key값으로 장르이름을 이용하여 데이터를 관리하려 합니다.
- map2는 장르별 합을 저장하기 위해 사용합니다.
- map은 장르별 곡의 정보를 담는 arraylist를 담습니다. Info는 곡의 순서 정보와 플레이 횟수를 담습니다.
이 두 가지 모두 이미 key값이 있다면 arraylist에 값을 넣어주고 그렇지 않으면 arraylist를 새로 만들어 값을 넣어줍니다.
- 장르별로 어떤 장르가 플레이횟수가 많은지 알기 위햇 list2에 넣어줍니다.
그리고 comparator를 구현하여 장르를 내림차순으로 정렬합니다.
- 이제 list2에 정렬된 장르대로 ans에 넣으면 됩니다. 장르에 해당하는 곡 정보들을 빼서 comparator를 구현합니다.
comparator는 플레이 횟수를 내림차순으로 우선 정렬 후, 플레이 횟수가 같다면 index를 오름차순으로 정렬합니다.
- 정렬된 상태에서 앞의 두 곡의 index를 ans list에 넣습니다. 만약 곡이 하나 밖에 없다면 한 곡만 넣습니다.
- 그리고 배열로 반환하기 위해 list를 배열로 변환해줍니다.
프로그래머스 베스트앨범 자바 코드