처음에는 문제를 이해를 못했다. 하지만 천천히 문제를 읽어보니
문제에서 주어진 열을 기준으로 정렬을 하는데 이 때 열의 값이 같다면
기본키 즉 첫번째 열을 기준으로 내림차순 정렬하고
정렬후에 row_begin 번째 행부터 row_end 번째 행까지의 합을 xor해주면 된다는 것이다.
이때 xor은 합을 answer에 xor 연산을 계속 해주면 된다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int cmpnum;
bool cmp(vector<int> a, vector<int> b) {
if (a[cmpnum] == b[cmpnum]) { //만약 col번째 열의 값이 같다면
// 기본키 (첫 번째 열) 기준 내림차순 정렬
return a[0] > b[0];
}
return a[cmpnum] < b[cmpnum]; //아니라면
}
int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
int answer = 0;
cmpnum = col - 1; //col번째 열
sort(data.begin(), data.end(), cmp); //오름차순 정렬
for (int i = row_begin - 1; i < row_end; i++) {
int sum = 0;
for (int j = 0; j < data[i].size(); j++) {
sum += data[i][j] % (i + 1);
}
answer ^= sum; //각각의 합을 계속 xor해주기
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][LV2][C++]리코쳇 로봇 (0) | 2024.06.11 |
---|---|
[프로그래머스][LV2][C++]거리두기 확인하기 (0) | 2024.06.09 |
[프로그래머스][LV.2][C++]미로 탈출(BFS) (1) | 2024.06.03 |
[프로그래머스][LV2][C++]행렬 테두리 회전하기 (0) | 2024.05.31 |
[프로그래머스][LV 2][C++]수식 최대화 (0) | 2024.05.29 |