ALGORITHM/PROGRAMMERS
[프로그래머스] 위클리 챌린지 6주차
0298
2021. 9. 6. 17:10
https://programmers.co.kr/learn/courses/30/lessons/85002
코딩테스트 연습 - 6주차
복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요
programmers.co.kr
2021-09-06
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.util.*;
class Solution {
public int[] solution(int[] weights, String[] head2head) {
int[] answer = new int[weights.length];
double[][] arr = new double[weights.length][4];
for(int i = 0; i < head2head.length; i++) {
int cnt = 0;
int wgt = 0;
int tot = 0;
for(int j = 0; j < head2head[i].length(); j++) {
if(i == j || head2head[i].charAt(j) == 'N') continue;
if(head2head[i].charAt(j) == 'W') {
cnt++;
if(weights[i] < weights[j]) wgt++;
}
tot++;
}
arr[i][0] = i; // 번호
arr[i][1] = weights[i]; // 무게
arr[i][2] = (tot == 0) ? 0 : cnt/(double)tot; // 승률
arr[i][3] = wgt; // 무거운 복서를 이긴 횟수
}
Arrays.sort(arr, new Comparator<double[]>() {
@Override
public int compare(double[] o1, double[] o2) {
if(o1[2] == o2[2]) {
if(o1[3] == o2[3]) {
if(o1[1] == o2[1]) {
return Double.compare(o1[0], o2[0]);
} return Double.compare(o2[1], o1[1]);
} return Double.compare(o2[3], o1[3]);
}
return Double.compare(o2[2] , o1[2]);
}
});
for(int i = 0; i < arr.length; i++) answer[i] = (int) arr[i][0]+1;
return answer;
}
}
|
cs |
#문제풀이
arr[weights.length][4] 배열을 만들고,
각 index의 [0]은 번호, [1]은 무게, [2]는 승률, [3]은 자신보다 무거운 복서를 이긴 횟수를 넣어서 정렬했다.
맨 처음에 제출했을 때 몇 개 틀렸는데, 승률 계산을 잘못해서였다.. N은 포함하면 안된다;;