2026.3.29.
https://school.programmers.co.kr/learn/courses/30/lessons/147354?language=javascript
% 연산자, ^ 연산자 - ^ 연산자는 살면서 쓸일이 없었어서 처음 써봤다. 문제에 냅다 'bitwise XOR' 연산을 수행하래서 그게 뭔데.. 하면서 개념 찾아보니 이진수로 변환해서 두 수를 자릿수별로 비교하는데, 값이 같으면 0을 다르면 1을 리턴하게 하고 그 결괏값을 리턴하라는 것이었다. . (결괏값도 이진법으로 적혀있는데 문제에서 반환하라는 값은 십진법 베이스여서 다시 역산이 필요)^ 연산자를 쓰면 된다고 힌트를 줘서 사용했다.function solution(data, col, row_begin, row_end) {
// 정렬부터
const sorted = data.sort((a, b) => a[col - 1] === b[col - 1] ? b[0] - a[0] : a[col - 1] - b[col - 1]);
let result = 0;
// S_i 구하기
// row_begin ~ row_end 빼먹는 것 없이 실행
for (let i = row_begin - 1; i < row_end; i++) {
const row = sorted[i];
const sum = row.reduce((acc, cur) => acc + cur % (i + 1), 0);
result = result ^ sum;
}
return result;
}
function solution(data, col, row_begin, row_end) {
// 정렬부터
const sorted = [...data].sort((a, b) => a[col - 1] === b[col - 1] ? b[0] - a[0] : a[col - 1] - b[col - 1]);
let result = 0;
// S_i 구하기
// row_begin ~ row_end 빼먹는 것 없이 실행
for (let i = row_begin - 1; i < row_end; i++) {
const row = sorted[i];
const sum = row.reduce((acc, cur) => acc + cur % (i + 1), 0);
result = result ^ sum;
}
return result;
}
sort()는 원본 배열을 변경하므로 spread 연산자를 사용해 새 배열을 생성하고 그것을 정렬하는 것이 안전하다.reduce 문서 다시보기~ 세번째 인자로 currentIndex를 받을 수 있음을 체크하고, 반복문 안에서 reduce 호출할 때 그 값도 사용하려 했는데, cur 값이 이미 해당 row의 컬럼값이 찍히고 있었다. 그래서 인덱스는 필요가 없었음. 이미 row에 대해서 반복을 돌리고 있어서 그런 거네.반복문 인덱스(0-based)와 문제의 행 번호(1-based)가 다를때
이 문제는 해시 개념을 이용하는 문제라기보다, 정렬 + 구현 능력을 보는 문제에 가깝다. 해시 유형으로 분류된 이유는 문제의 "소재"가 해시 함수여서라고 보는 게 맞다. (해시 함수 자체를 구현하는 문제)