반응형
Comparator 를 이용한 문제
Compartor 안에 조건문을 걸어주고 return 시켜 주면 이중, 삼중으로 정렬 할 수 있다.
return 값에서 x,y 부분을 반대로 바꿔주면 [오름차순 <-> 내림차순] 으로 바꿀 수 있다.
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 42 43 44 45 46 | import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; public class Main { public static void main(String args[]) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); String[][] arr = new String[N][4]; for (int i = 0; i < N; i++) { arr[i] = br.readLine().split(" "); } //Comparator 사용 Arrays.sort(arr, new Comparator<String[]>() { @Override public int compare(String[] s1, String[] s2) { if (Integer.parseInt(s1[1]) == Integer.parseInt(s2[1])) { if (Integer.parseInt(s1[2]) == Integer.parseInt(s2[2])) { if (Integer.parseInt(s1[3]) == Integer.parseInt(s2[3])) { //국영수 점수가 같다면 사전 오름차순 return s1[0].compareTo(s2[0]); } //국어점수 같고 영어점수 같을 때, 수학 점수는 내림차순 return Integer.compare(Integer.parseInt(s2[3]), Integer.parseInt(s1[3])); } //국어 점수 같을 때, 영어 점수는 오름차순 return Integer.compare(Integer.parseInt(s1[2]), Integer.parseInt(s2[2])); } //국어점수는 내림차순 return Integer.compare(Integer.parseInt(s2[1]), Integer.parseInt(s1[1])); } }); for (int i = 0; i < N; i++) { System.out.println(arr[i][0]); } } } | cs |
반응형
'나는요 공부가 좋....은걸... > 알고리즈음' 카테고리의 다른 글
[BOJ] 백준 2947 - 나무 조각 (자바) (0) | 2018.01.19 |
---|---|
[BOJ] 백준 2193 - 이친수 (자바) (0) | 2018.01.18 |
[BOJ] 백준 2399 - 거리의 차이 (자바) (0) | 2018.01.13 |
[BOJ] 백준 11651 - 좌표 정렬하기 (자바) (0) | 2018.01.12 |
[BOJ] 백준 10814 - 나이순 정렬 (자바) (0) | 2018.01.12 |