문제 해석
코드
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st ;
int N = Integer.parseInt(br.readLine());
int[][] arrays = new int[N][2];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
arrays[i][0] = Integer.parseInt(st.nextToken());
arrays[i][1] = Integer.parseInt(st.nextToken());
}
br.close();
Arrays.sort(arrays, (num1, num2) -> {
return num1[0]!=num2[0] ? num1[0]-num2[0] : num1[1]-num2[1];
});
for(int i = 0; i < N; i++){
bw.write(arrays[i][0] + " " + arrays[i][1] +"\n");
}
bw.flush();
bw.close();
}
}
Arrays.sort(arrays, (num1, num2) -> {
return num1[0]!=num2[0] ? num1[0]-num2[0] : num1[1]-num2[1];
});
public static <T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
Comparable vs. Comparator
=> 즉, Comparable은 매개변수가 1개니까 자기 자신과 매개변수 객체를 비교하는 것이고,
Comparator은 매개변수가 2개이니까 그 두 매개변수의 객체를 비교한다는 것이다.
int[][] arrays = [[1, 2], [1 ,3], [1, 1]]
//1.
Arrays.sort(arrays, new Comparator<Integer>() {
@Override
public int compare(int num1, int num2) {
return num1[0]!=num2[0] ? num1[0]-num2[0] : num1[1]-num2[1];
}
});
//2.
Arrays.sort(arrays, (num1, num2) -> {
return num1[0]!=num2[0] ? num1[0]-num2[0] : num1[1]-num2[1];
});
-> 다시 정리하자면, ①과 ②번은 같은 식이다.
-> 해당 array를 입력받고 그 arrays들의 요소들을 비교하는데, 만약 Comparator에 들어간 num1과 num2을 비교했을시. num1의 0번째요소(=x)과 num2의 0번째요소(=x)가 같다면 y를 비교하고, 다르면 x를 비교하는데 비교하는 식은 num1 - num2이다. 만약이 값(num1 - num2)이 양수이면 자리를 바꾸고, 만약 음수 혹은 0이면 배열의 자리를 바꾸지 않는다.
결과
느낀점