[ 프로그래머스 ] 복서 정렬하기 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

 

코딩테스트 연습 - 6주차_복서 정렬하기

복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요

programmers.co.kr

 

728x90
반응형