Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 강아지 홀리스틱
- 반려견 유기농
- 강아지 더위
- 홀리스틱 유기농
- 티켓팅매크로
- 강아지종류
- 서울대입구 맛집
- 강아지 종류
- 티켓팅메크로
- 자동화봇
- 부산 맛집
- 반려견 열사병
- 강아지 유기농 사료
- 쿠팡매크로
- 샤로수길 데이트
- 강아지 열사병
- 강아지 유기농
- 반려견 사료등급
- 강아지
- 반려견 유기농 사료
- 반려견
- 반려견 홀리스틱
- 국비지원 예습
- 반려견 종류
- 신포동 맛집
- 동인천 맛집
- 닥스훈트
- 샤로수길 맛집
- 반려견 더위
- 쿠팡메크로
Archives
- Today
- Total
심심한잉여의 잡동사니
JAVA - 프로그래머스 3레벨[해시] - 베스트앨범 본문
반응형
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class bestAlbum {
public int[] solution(String[] genres, int[] plays) {
List<Integer> answerList = new ArrayList<Integer>();
Map<String, Integer> genresMap = new HashMap<String, Integer>();
List<String> genresList = new ArrayList<String>(Arrays.asList(genres));
Map<Integer, Integer> playList = new HashMap<Integer, Integer>();
for (int i = 0; i < plays.length; i++) {
playList.put(i, plays[i]);
}
for (int i = 0; i < genresList.size(); i++) {
// 장르의 총 재생수를 파악하기 위한 순회
if (!genresMap.containsKey(genresList.get(i))) {
// 맵이 중복된 키를 가질수없는 것을 활용하여 맵안에 현재 키가 있는지 확인 없으면 추가
genresMap.put(genresList.get(i), playList.get(i));
} else {
// 현재 키가 들어있다면 키에 대한 밸류값에 순회중인 id의 재생수를 추가하여 다시 밸류값으로 넣기
genresMap.put(genresList.get(i), (genresMap.get(genresList.get(i)) + playList.get(i)));
}
}
List<Map.Entry<String, Integer>> genresRank = new ArrayList<Map.Entry<String, Integer>>(genresMap.entrySet());
genresRank.sort(new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
int result = o2.getValue() - o1.getValue();
return result;
}
});
// 엔트리로 바꿔 장르 순위 정렬
List<Map.Entry<Integer, Integer>> playRank = new ArrayList<Map.Entry<Integer, Integer>>(playList.entrySet());
playRank.sort(new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
int result = o2.getValue() - o1.getValue();
return result;
}
});
// 엔트리로 바꿔 플레이리스트 재생순위 정렬
for (Map.Entry<String, Integer> entry : genresRank) {
// 정렬된 장르 순회
int count = 0;
for (Map.Entry<Integer, Integer> playsEntry : playRank) {
// 정렬된 플레이리스트 순회
if (genresList.get(playsEntry.getKey()).equals(entry.getKey())) {
// 플레이스트의 id(인덱스)가 현재 순회중인 장르와 같다면
answerList.add(playsEntry.getKey());
// 답안지에 추가
count++;
// 각 장르별 2개씩이니 카운트
if (count == 2) {
// 2개가 되었다면 순회 종료
break;
}
}
}
}
int[] answer = new int[answerList.size()];
for (int i = 0; i < answerList.size(); i++) {
answer[i] = answerList.get(i);
}
return answer;
}
}
반응형
'코딩일기 > 코딩테스트 연습' 카테고리의 다른 글
[알고리즘]버블 정렬 (0) | 2022.03.29 |
---|---|
[알고리즘]선택 정렬(Selection Sort) (0) | 2022.03.26 |
JAVA - 프로그래머스 2레벨 - 튜플 (0) | 2021.10.20 |
JAVA - 프로그래머스 1레벨 - N번째 수 (0) | 2021.10.18 |
JAVA - 프로그래머스 1레벨 - 완주못한 선수 (0) | 2021.10.17 |