[프로그래머스 위클리 챌린지]#85002 6주차_복서 정렬하기
문제
복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요.
- 전체 승률이 높은 복서의 번호가 앞쪽으로 갑니다. 아직 다른 복서랑 붙어본 적이 없는 복서의 승률은 0%로 취급합니다.
- 승률이 동일한 복서의 번호들 중에서는 자신보다 몸무게가 무거운 복서를 이긴 횟수가 많은 복서의 번호가 앞쪽으로 갑니다.
- 자신보다 무거운 복서를 이긴 횟수까지 동일한 복서의 번호들 중에서는 자기 몸무게가 무거운 복서의 번호가 앞쪽으로 갑니다.
- 자기 몸무게까지 동일한 복서의 번호들 중에서는 작은 번호가 앞쪽으로 갑니다.
입출력 예제
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;
}
}
}
Author And Source
이 문제에 관하여([프로그래머스 위클리 챌린지]#85002 6주차_복서 정렬하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pss407/프로그래머스-위클리-챌린지85002-6주차복서-정렬하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)