728x90
문제
풀이
복서들의 정보를 가지고 문제에서 제시된 조건으로 정렬합니다.
동점자인 경우의 정렬기준이 3가지 있습니다.
번호, 승률, 몸무게가 많은사람을 이긴 횟수, 몸무게를 필드값으로 가지는 Boxer 클래스를 생성합니다.
Boxer list를 정렬할 때 Comparator 익명 구현체로 문제에 주어진 상황에 맞게 정렬합니다.
소스코드
import java.util.*;
class Solution {
public int[] solution(int[] weights, String[] head2head) {
List<Boxer> boxers = new ArrayList<>();
int N = weights.length;
for (int i = 0; i < N; i++) {
int totalGameCnt = 0;
int winGameCnt = 0;
int winHeavyCnt = 0;
for (int j = 0; j < N; j++) {
if (head2head[i].charAt(j) == 'N') {
} else if (head2head[i].charAt(j) == 'W') {
totalGameCnt++;
winGameCnt++;
if (weights[i] < weights[j]) {
winHeavyCnt++;
}
} else if (head2head[i].charAt(j) == 'L') {
totalGameCnt++;
}
}
if (totalGameCnt == 0) {
boxers.add(new Boxer(i + 1, 0, winHeavyCnt, weights[i]));
} else {
boxers.add(new Boxer(i + 1, (double) winGameCnt / totalGameCnt, winHeavyCnt, weights[i]));
}
}
System.out.println(boxers.toString());
boxers.sort(new Comparator<Boxer>() {
@Override
public int compare(Boxer b1, Boxer b2) {
if (b1.winRate > b2.winRate) {
return -1;
} else if (b1.winRate < b2.winRate) {
return 1;
} else {
if (b1.winHeavy > b2.winHeavy) {
return -1;
} else if (b1.winHeavy < b2.winHeavy) {
return 1;
} else {
if (b1.weight > b2.weight) {
return -1;
} else if (b1.weight < b2.weight) {
return 1;
} else {
if (b1.num < b2.num) {
return -1;
} else if (b1.num > b2.num) {
return 1;
} else {
return 0;
}
}
}
}
}
});
System.out.println(boxers.toString());
int[] answer = new int[N];
for (int i = 0; i < answer.length; i++) {
answer[i] = boxers.get(i).num;
}
return answer;
}
class Boxer {
int num;
double winRate;
int winHeavy;
int weight;
Boxer(int num, double winRate, int winHeavy, int weight) {
this.num = num;
this.winRate = winRate;
this.winHeavy = winHeavy;
this.weight = weight;
}
@Override
public String toString() {
return "num : " + num + ", winRate : " + winRate + ", winHeavy : " + winHeavy + ", weight : " + weight
+ "\n";
}
}
}
'CS > 알고리즘' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지 7주차 - 입실 퇴실 (0) | 2021.09.15 |
---|---|
[BOJ] 5430번 : AC - Java (0) | 2021.08.16 |
[프로그래머스] 카카오프렌즈 컬리링북 (0) | 2021.08.11 |
[프로그래머스] 위클리 챌린지 1주차 - 상호 평가 (0) | 2021.08.09 |
[프로그래머스] 위클리 챌린지 2주차 - 상호 평가 (0) | 2021.08.09 |