sort를 이용해서 정렬하기 + 반복문을 이용해서 xor 값을 계산해주기. 두가지를 이용해서 풀었다.
우선, c++의 내장 함수 sort(algorithm 라이브러리 include 필요) 를 이용해서 compare 함수를 만들어주자.
그 후, row_begin부터 row_end까지(index는 0부터 시작이라서 1씩 뺀 상태로 시작 필요) 반복문 내부에서 data 크기만큼 또 한번 반복문을 이용해서 돌면서 원소 % (인덱스 + 1) 을 해준 값을 마지막에 xor 해주자.
XOR은 0과 항등식을 이루기 때문에 기존에 만들어진 코드인 answer = 0에서 xor만 계속 해준다면 문제가 생길 부분은 없다.
[회고]
오랜만에 sort compare 문을 써서 처음에 순간 헷갈렸는데 생각보다 금방 기억이 나서 회복되었다.
[코드]
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int col;
bool compare(vector<int> one, vector<int> two){
//만일 2번째 => 1 인덱스 값이 같다면
if(one[col] == two[col]){
return one[0] > two[0];
}
return one[col] < two[col];
}
int solution(vector<vector<int>> data, int coll, int row_begin, int row_end) {
int answer = 0;
col = coll - 1;
//1. 우선 정렬을 하자.
//data를 col값을 기준으로 오름차순, 만일 같은게 있다면 1번째(0번째) 원소를 기준으로 내림차순
sort(data.begin(),data.end(),compare);
//2. row_begin부터 end까지 반복하면서 i + 1로 mod 한 값을 다 더한뒤 answer에 xor 해주자.
int modulus = 0;
for(int i = row_begin - 1; i< row_end; i++){
modulus = 0;
for(int j = 0; j < data[i].size();j++){
modulus += data[i][j] % (i + 1);
}
answer ^= modulus;
}
return answer;
}