정렬된 데이터에서 S_i를 i 번째 행의 튜플에 대해 각 컬럼의 값을 i 로 나눈 나머지들의 합으로 정의합니다.
각 칼럼의 값을 i로 나눈 나머지를 구할 때 i는 1부터 시작한다는 것에 주의하자
0으로 나누기/나머지 연산을 하는 경우 signal: floating point exception (core dumped) 발생
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int COL;
bool cmp(const vector<int>& a,const vector<int>& b){
if(a[COL-1] < b[COL-1]) return true;
if(a[COL-1] > b[COL-1]) return false;
return (a[0] > b[0]);
}
int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
COL = col;
sort(data.begin(), data.end(), cmp);
vector<int> S_i;
for(int i = 0; i<data.size(); ++i){
int sum = 0;
for(int j = 0; j<data[i].size(); ++j){
sum += (data[i][j] % (i+1));
}
S_i.push_back(sum);
}
int answer = S_i[row_begin-1];
for(int i = row_begin; i<row_end; ++i){
answer = answer ^ S_i[i];
}
return answer;
}