[ 프로그래머스 ] 복서 정렬하기 JAVA
2021. 10. 1. 18:01ㆍ알고리즘/프로그래머스
728x90
반응형
문제 풀이
import java.util.*;
class Solution {
public int[] solution(int[] weights, String[] head2head) {
int[] answer = new int[weights.length];
List<HashMap<String, Float>> list = new ArrayList<HashMap<String, Float>>();
for(int i=0; i<head2head.length; i++) {
HashMap<String, Float> map = new HashMap<String, Float>();
String[] arr = head2head[i].split("");
int cnt = 0, win = 0, hvy = 0;
float avg=0;
for(int j=0; j<arr.length; j++) {
if(!arr[j].equals("N")) cnt++;
if(arr[j].equals("W")){
win++;
if(weights[i] < weights[j]) hvy++;
}
}
if(cnt>0)avg = (float)win/cnt * 100;
map.put("idx", (float)i+1);
map.put("avg", avg);
map.put("hvy", (float)hvy);
map.put("weight", (float)weights[i]);
list.add(map);
}
Collections.sort(list, new Comparator<HashMap<String, Float>>() {
@Override
public int compare(HashMap<String, Float> o1, HashMap<String, Float> o2) {
float avg1 = o1.get("avg");
float avg2 = o2.get("avg");
float hvy1 = o1.get("hvy");
float hvy2 = o2.get("hvy");
float weight1 = o1.get("weight");
float weight2 = o2.get("weight");
float idx1 = o1.get("idx");
float idx2 = o2.get("idx");
if(avg1 == avg2) {
if(hvy1 == hvy2) {
if(weight1 == weight2) return idx1<idx2?-1:1;
else return weight1<weight2?1:-1;
} else return hvy1<hvy2?1:-1;
}
return avg1<avg2?1:-1;
}
});
for(int i=0; i<list.size(); i++) {
answer[i] = Math.round(list.get(i).get("idx"));
}
return answer;
}
}
복서 정보를 저장하는 map을 만들어서 번호, 승률, 무거운 복서 이긴 횟수, 몸무게 정보를 저장하고
map을 list에 담아서 list를 정렬하는 방식으로 풀었습니다.
정렬은 Comparator 인터페이스를 사용하여 compare 함수를 문제에 맞게 재정의했습니다.
승률, 무거운 복서 이긴 횟수, 몸무게, 번호 순으로 비교한 다음 answer에 순서대로 번호를 저장시켰습니다.
출처 : https://programmers.co.kr/learn/courses/30/lessons/85002
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[ 프로그래머스 ] 모음사전 JAVA (0) | 2021.09.30 |
---|---|
[ 프로그래머스 ] 직업군 추천하기 JAVA (0) | 2021.09.17 |
[ 프로그래머스 ] 상호평가 JAVA (0) | 2021.09.09 |
[ 프로그래머스 ] 부족한 금액 계산하기 JAVA (0) | 2021.09.09 |
[ 프로그래머스 ] 전화번호 목록 C++ 해시 (0) | 2020.01.04 |