티스토리 뷰
728x90
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
풀이 과정
1. HashMap을 통해 genres[] 를 Key별 plays[]를 Value genresMap을 만든다
ex) {pop=3100, classic=1450}
2. 키별 재생횟수 기준으로 내림 차순을 정렬
3. 반복문을 통해 장르별 playMap을 만든다 <idx, playCount>
4. 3번을 재생횟수 내림차순 정렬해준다.
5. !! 곡은 두개만 실을 수 있다. list.size()>1 이라면 더이상 결과값에 넣어주지 않는다.
package programmers.level3;
import org.junit.Test;
import java.util.*;
public class P42579 {
@Test
public void 정답() {
String[] genres = {"classic", "pop", "classic", "classic", "pop"};
int[] plays = {500, 600, 150, 800, 2500};
System.out.println(Arrays.toString(solution(genres, plays)));
}
public int[] solution(String[] genres, int[] plays) {
int[] answer = {};
HashMap<String, Integer> genresMap = new HashMap<>();
for (int i = 0; i < genres.length; i++) {
genresMap.put(genres[i], genresMap.getOrDefault(genres[i], 0) + plays[i]);
}
List<String> genresList = new ArrayList<>(genresMap.keySet());
Collections.sort(genresList, (o1, o2) -> genresMap.get(o2) - genresMap.get(o1));
ArrayList<Integer> answerList = new ArrayList<>();
for (String s : genresList) {
HashMap<Integer, Integer> playsMap = new HashMap<>();
for (int i = 0; i < genres.length; i++) {
if (s.equals(genres[i])) {
playsMap.put(i, plays[i]);
}
}
List<Integer> playList = new ArrayList<>(playsMap.keySet());
Collections.sort(playList, (o1, o2) -> playsMap.get(o2) - playsMap.get(o1));
int j = 0;
for (Integer i : playList) {
if (j > 1) {
break;
}
answerList.add(i);
j++;
}
}
answer = answerList.stream().mapToInt(i -> i).toArray();
return answer;
}
}
'알고리즘 - Java' 카테고리의 다른 글
[Programmers] 큰 수 만들기 - Java (0) | 2022.03.30 |
---|---|
[Programmers] 뉴스 클러스터링 - Java (0) | 2022.03.30 |
[Programmers] 영어 끝말잇기-Java (0) | 2022.03.18 |
[COS Pro 1급] - 메모장(6차) (0) | 2022.03.16 |
[COS Pro] 1급 - 숫자 뽑기(6차) (0) | 2022.03.16 |
댓글