-
[프로그래머스] 복서 정렬하기 #JAVAAlgorithm Solving/Programmers 2021. 9. 7. 15:05
[프로그래머스] 복서 정렬하기 #JAVA
코드
public class Solution { public static void main(String[] args) throws IOException{ solution(new int[]{50,82,75,120}, new String[]{"NLWL","WNLL","LWNW","WWLN"}); solution(new int[]{145,92,86}, new String[]{"NLW","WNL","LWN"}); solution(new int[]{60,70,60}, new String[]{"NNN","NNN","NNN"}); } public static int[] solution(int[] weights, String[] head2head) { int[] answer = new int[weights.length]; int[][] boxer = new int[weights.length][4]; for (int i = 0; i < weights.length; i++) { int weight = weights[i]; int cnt = 0; int win = 0; int winbigman = 0; for (int j = 0; j < weights.length; j++) { char ch = head2head[i].charAt(j); if(ch != 'N') cnt++; if(ch == 'W') { win++; if(weights[i] <weights[j]) { winbigman++; } } } boxer[i][0] = i + 1 ; // 원본 인덱스 +1 boxer[i][1] = weights[i] ; // 몸무게 boxer[i][2] = cnt != 0 ? (int) ((1.0 *win/cnt) * 100000) : 0 ; // 승률 boxer[i][3] = winbigman; // 큰놈이랑 이긴 횟수 } Arrays.sort(boxer, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { if(o1[2] != o2[2]) return o2[2]-o1[2]; //승률 if(o1[3] != o2[3]) return o2[3]-o1[3]; //큰놈이랑 싸움 if(o1[1] != o2[1]) return o2[1]-o1[1]; //몸무게 return o1[0] - o2[0]; } }); for (int i = 0; i < boxer.length; i++) { answer[i] = (int)boxer[i][0]; //인덱스 } return answer; } }
주의사항
boxer[i][2] = cnt != 0 ? (int) ((1.0 *win/cnt) * 100000) : 0 ; // 승률
여기서 큰수 100000을 곱하지 않으면 소숫점 자릿수가 int로 형변환 되면서 날라가는 문제가 생긴다.
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)