-
[프로그래머스] 베스트앨범ALGORITHM/PROGRAMMERS 2021. 1. 23. 19:16
programmers.co.kr/learn/courses/30/lessons/42579
2021-01-23
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960import java.util.*;public class Solution42579 {public static int[] solution(String[] genres, int[] plays) {HashMap<String, Integer> map = new HashMap<>();int maxLength = 0;for(int i = 0; i < genres.length; i++) { // 각 장르의 재생횟수 합치기if(map.containsKey(genres[i])) {map.put(genres[i], map.get(genres[i])+plays[i]);} else map.put(genres[i], plays[i]);maxLength = Math.max(maxLength, map.get(genres[i]));}List<String> keySetList = new ArrayList<>(map.keySet()); // list에 넣고Collections.sort(keySetList, new Comparator<String>() { // 재생횟수 순으로 오름차순 정리@Overridepublic int compare(String o1, String o2) {return map.get(o2) - map.get(o1);}});ArrayList<Integer> list = new ArrayList<>();for(int i = 0; i < keySetList.size(); i++) { // 장르 순서대로 돌면서int idx = 0;int arr[][] = new int[maxLength][2];for(int j = 0; j < genres.length; j++) {if(genres[j].equals(keySetList.get(i))) { // 같은 장르arr[idx][0] = plays[j];arr[idx++][1] = j;}}Arrays.sort(arr, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o2[0] - o1[0]; // 재생횟수 기준으로 오름차순}});if(arr[0][0] != 0) list.add(arr[0][1]);if(genres.length > 1 && arr[1][0] != 0) list.add(arr[1][1]);// 4번 : 하나인 경우 이 설정 안 해주면 런타임 에러}int answer[] = new int[list.size()];for(int i = 0; i < list.size(); i++) answer[i] = list.get(i);return answer;}public static void main(String[] args) {String g[] = {"classic", "pop", "classic", "classic", "pop"};int p[] = {500, 600, 150, 800, 2500};// String g[] = {"classic","jazz","music","rap","pop"};// int p[] = {500,150,600,800,2500};// String g[] = {"classic"};// int p[] = {500};System.out.println(Arrays.toString(solution(g, p)));}}cs #문제풀이
문제를 간단히 쪼개서 생각하면,
(1) 장르별 재생횟수의 합을 오름차순으로 정렬한다.
(2) 각 장르의 노래별 재생횟수를 오름차순으로 정렬한다.
로 나눠서 생각할 수 있다.
첫 번째는 hashmap을 이용하였고, 두 번째는 2차원 배열을 이용하였다.
+) 4번에서 런타임 에러가 났었는데, 로직에서 틀린 것 같지는 않아서 혹시나 genres의 길이가 1인 배열을 넣어봤더니 41번에서 틀렸었던 것이다. 총 갯수가 1개 밖에 없을 때도 체크를 해야한다.
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 합승 택시 요금 (2021 KAKAO BLIND RECRUITMENT) (0) 2021.01.31 [프로그래머스] 신규 아이디 추천 (2021 KAKAO BLIND RECRUITMENT) (0) 2021.01.26 [프로그래머스] 괄호 변환 (2020 KAKAO BLIND RECRUITMENT) (0) 2021.01.23 [프로그래머스] 외벽 점검 (2020 KAKAO BLIND RECRUITMENT) (0) 2021.01.17 [프로그래머스] 보석 쇼핑 (2020 카카오 인턴십) (0) 2021.01.06