문제: https://school.programmers.co.kr/learn/courses/30/lessons/147354
정렬 먼저:
S_i 구하기
XOR? → 비트 연산 필요
→ ^ 연산자 사용
시작 인덱스가 1부터 시작해서 모든 인덱스에서 1씩 빼줘야한다.
import java.util.*;
class Solution {
public int solution(int[][] data, int col, int row_begin, int row_end) {
// 1 -> 0 시작
col = col - 1;
// 정렬 (col 기준 오름차순 정렬, 같을 경우 첫 번째 열 기준 내림차순 정렬)
List<int[]> copy = new ArrayList<>();
copy.add(data[0]);
for(int i = 1; i < data.length; i++){
boolean inserted = false; // 삽입 여부 확인
for(int j = 0; j < copy.size(); j++){
int[] current = copy.get(j);
if(data[i][col] < current[col]){
// col 기준 오름차순으로 삽입
copy.add(j, data[i]);
inserted = true;
break;
}
else if(data[i][col] == current[col]){
if(data[i][0] > current[0]){
// col 값이 같을 경우 첫 번째 열 기준 내림차순으로 삽입
copy.add(j, data[i]);
inserted = true;
break;
}
}
}
if(!inserted){
// 모든 기존 요소보다 크거나 같은 경우 리스트의 끝에 추가
copy.add(data[i]);
}
}
// 3. S_i 계산
int answer = 0;
for (int i = row_begin; i <= row_end; i++) {
// 1 -> 0 으로 변환
int index = i - 1;
if(index >= 0 && index < copy.size()){
answer ^= calc(copy.get(index), i);
}
}
return answer;
}
// S_i 계산
public int calc(int[] data, int i){
int sum = 0;
for(int num : data){
sum += num % i;
}
return sum;
}
}
1에서 시작한다는 부분을 잡지 못해 많이 헤맨거같다 & 하나는 내림차순, 하나는 오름차순이라 나간 정신 찾으러 갑니다
참 쉽쥬잉~?~?