import java.util.*;
class Solution {
public int solution(int[][] data, int col, int row_begin, int row_end) {
Nums[] numsArray = new Nums[data.length];
for (int i = 0; i < data.length; i++) {
numsArray[i] = new Nums(data[i][col - 1], data[i]);
}
Arrays.sort(numsArray);
int answer = 0;
for (int i = row_begin - 1; i < row_end; i++) {
int[] row = numsArray[i].arr;
int sum = 0;
for (int value : row) {
// (i + 1)은 실제 행 번호와 일치하도록 수정
sum += value % (i + 1);
}
// XOR 연산
answer ^= sum;
}
return answer;
}
static class Nums implements Comparable<Nums> {
// 정렬하고자 하는 값
int value;
int[] arr;
public Nums(int value, int[] arr) {
this.value = value;
this.arr = arr;
}
@Override
public int compareTo(Nums other) {
if (this.value == other.value) {
// 기본키 기준 내림차순
return other.arr[0] - this.arr[0];
} else {
// 주어진 컬럼 기준 오름차순
return this.value - other.value;
}
}
}
}
문제에서 원하는 조건대로 정렬을 해주기 위해, Nums라는 클래스를 만들어주고, 여기에 정렬을 위한 기준값(value)와 1차원 배열의 정보를 저장한다. 이후 배열을 정렬하고, 나머지 합을 XOR한다.
다른 개발자의 풀이 코드를 보니, Arrays.sort로 문제를 해결할 수도 있었다.
Arrays.sort(data, (a, b) -> {
if (a[col - 1] == b[col - 1]) {
return b[0] - a[0]; // 첫 번째 컬럼을 기준으로 내림차순
} else {
return a[col - 1] - b[col - 1]; // col번째 컬럼을 기준으로 오름차순
}
});
단순히 Arrays.sort(data);만 사용해봤는데, 이렇게 사용자 정의를 통해 정렬을 바로 작업할 수 있는 방법도 있다는 것을 깨달았다.
내일은 Arrays 클래스에서 사용할 수 있는 다른 메서드들에 대해 정리해보려 한다.