주어진 2-dimensional array
를 조건에 맞게 정렬한 뒤 비트연산을 수행해야 하는 문제입니다.
<문제 요구사항>
테이블의 튜플을 col번째 컬럼의 값을 기준으로 오름차순 정렬을 하되, 만약 그 값이 동일하면 기본키인 첫 번째 컬럼의 값을 기준으로 내림차순 정렬합니다.
col번째 컬럼
과 첫번째 컬럼
두 가지 조건이 있기 때문에 정렬을 위해 Comparator
interface의 compare
method를 override했습니다. compare
method는 두 가지 인자를 받는데, 앞이 크면 양수
를, 뒤가 크면 음수
를, 같으면 0
을 리턴하도록 작성하면 됩니다.
비트연산은 연산자별 기능만 가볍게 정리하도록 하겠습니다. 본 문제에서는 XOR 연산이 요구되었습니다.
operator | result |
---|---|
& | AND 연산 |
| | OR 연산 |
^ | XOR 연산 |
~ | 비트 반전 |
<< | 비트 열을 왼쪽으로 이동 |
>> | 비트 열을 오른쪽으로 이동 |
import java.util.*;
class Solution {
public int solution(int[][] data, int col, int row_begin, int row_end) {
int answer = 0;
int[][] reversed = new int[data.length][data[0].length];
sortbyColumn(data, col - 1);
for (int i = row_begin - 1; i < row_end; i++) {
int cur = 0;
for (int j = 0; j < data[0].length; j++) {
cur += data[i][j] % (i + 1);
}
answer ^= cur;
}
return answer;
}
public void sortbyColumn(int[][] data, int col) {
Arrays.sort(data, new Comparator<int[]>() {
@Override
public int compare(final int[] entry1, final int[] entry2) {
if (entry1[col] > entry2[col]) {
return 1;
} else if (entry1[col] == entry2[col]) {
if (entry1[0] < entry2[0]) {
return 1;
} else {
return -1;
}
} else {
return -1;
}
}
});
}
}