복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요.
weights | head2head | result |
---|---|---|
[50,82,75,120] | ["NLWL","WNLL","LWNW","WWLN"] | [3,4,1,2] |
[145,92,86] | ["NLW","WNL","LWN"] | [2,3,1] |
[60,70,60] | ["NNN","NNN","NNN"] | [2,1,3] |
이 문제는 우선순위큐를 이용해서 해당하는 조건의 복서를 순서대로 정렬해서 답을 출력할 수 있었다.
import java.util.PriorityQueue;
class Solution {
public int[] solution(int[] weights, String[] head2head) {
int[] answer = new int[weights.length];
PriorityQueue<Boxer> pq = new PriorityQueue<>();
for(int i=0; i<weights.length; i++) {
String res = head2head[i];
double percent = 0;
int total = 0;
int win = 0;
int cnt = 0;
int weight = weights[i];
for(int j=0; j<res.length(); j++) {
char c = res.charAt(j);
if(c!='N') {
total++;
if(c=='W') {
win++;
if(weight<weights[j])
cnt++;
}
}
}
if(total!=0)
percent = (double)win/total;
pq.add(new Boxer(i+1, percent, cnt, weight));
}
int idx = 0;
while(!pq.isEmpty()) {
answer[idx++] = pq.poll().idx;
}
return answer;
}
public class Boxer implements Comparable<Boxer>{
int idx;
double percent;
int cnt;
int weight;
public Boxer(int idx, double percent, int cnt, int weight) {
this.idx = idx;
this.percent = percent;
this.cnt = cnt;
this.weight = weight;
}
public int compareTo(Boxer b) {
if(this.percent==b.percent) {
if(this.cnt == b.cnt) {
if(this.weight==b.weight)
return this.idx > b.idx ? 1 : -1;
return this.weight < b.weight ? 1 : -1;
}
return this.cnt < b.cnt ? 1 : -1;
}
return this.percent < b.percent ? 1 : -1;
}
}
}