on
[알고리즘] 프로그래머스 베트스앨범
[알고리즘] 프로그래머스 베트스앨범
처음풀어보는 프로그래머스 레벨 3 문제 였다.
문제부터 읽어보면 무슨 소리인지 몰랐는데,
가장 많이 재생된 장르를 골라 2개씩 고유번호(배열의 인덱스번호)를 결과 값에 담으면 된다.
이걸보면 pop는 총 3100번 > classic 는 1450번으로
pop부터 2개 담고 classic 2개를 담으면 된다.
import java.util.*; class Solution { public Integer[] solution(String[] genres, int[] plays) { ArrayList answerList = new ArrayList(); HashMap hashMap = new HashMap(); HashMap genresMap = new HashMap(); HashMap playsMap = new HashMap(); for (int i = 0; i < genres.length; i++) { hashMap.put(genres[i], hashMap.getOrDefault(genres[i], 0) + plays[i]); genresMap.put(i, genres[i]); playsMap.put(i, plays[i]); } List keySetList = new ArrayList<>(hashMap.keySet()); List musicList = new ArrayList<>(genresMap.keySet()); Collections.sort(keySetList, (o1, o2) -> (hashMap.get(o2).compareTo(hashMap.get(o1)))); Collections.sort(musicList, (o1, o2) -> (playsMap.get(o2).compareTo(playsMap.get(o1)))); for (String string : keySetList) { int count = 0; for (int i = 0; i < musicList.size(); i++) { if (genresMap.get(musicList.get(i)).equals(string)) { if (count == 2) { break; } else { count++; answerList.add(musicList.get(i)); } } } } Integer[] answer = answerList.toArray(new Integer[0]); return answer; } }
필자는 Map에 3개로 구현하고 정렬 후 답을 출력했다
Map<장르, 재생수>
Map<고유번호, 장르>
Map<고유번호, 장르>
이렇게 구현한 후 정렬후 비교과정을 거친후 결과 리스트에 담았다.
반응형
from http://dongle.tistory.com/14 by ccl(S) rewrite - 2021-10-24 14:01:59