프로그래머스/2레벨
[프로그래머스/C++] 테이블 해시 함수
Koalitsiya
2024. 3. 12. 17:08
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- data를 조건에 따라 정렬
- data의 row_begin <= i <= row_end에 3번을 수행한 값을 따로 배열에 저장
- 해당 배열의 값들을 누적하여 birwise XOR 연산 수행
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int idx;
// 비교자
int cmp(vector<int> a, vector<int> b) {
if(a[idx] == b[idx]) return a[0] > b[0];
return a[idx] < b[idx];
}
int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
int answer = 0;
idx = col - 1;
// data를 조건에 따라 정렬
sort(data.begin(), data.end(), cmp);
vector<int> s;
// row_begin <= i <= row_end
for(int i = row_begin - 1; i <= row_end - 1; i++) {
int num = 0;
// S_i는 i 번째 행의 튜플에 대해 각 컬럼의 값을 i로 나눈 나머지들의 합
for(int j = 0; j < data[i].size(); j++)
num += data[i][j] % (i + 1);
s.push_back(num);
}
answer = s[0];
// 해시 값은 s 배열의 모든 값을 누적하여 bitwise XOR 한 값
for(int i = 1; i < s.size(); i++)
answer = answer ^ s[i];
return answer;
}