Level 2️⃣ - 테이블 해시 함수
2024. 5. 20. 18:12ㆍ알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/147354
🚀문제 접근
비트 연산자 를 활용하는 문제이다.
문제는 요구사항대로 구현만 하면 된다. 비트 연산자에 대해 잘 알지 못했는데 공부할 수 있는 기회가 되었다.
XOR 연산은 두 피연산자를 32비트의 2진법으로 변경한 후, 각 자리의 값(0또는 1)이 같으면 그 자리를 0, 다르면 그 자리를 1로 바꾼 후에 10진법의 정수로 리턴하는 연산자이다.
const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011
console.log(a ^ b); // 00000000000000000000000000000110
// Expected output: 6
function solution(data, col, row_begin, row_end) {
// 테이블의 튜플을 col번째 컬럼의 값을 기준으로 오름차순 정렬을 하되,
// 만약 그 값이 동일하면 기본키인 첫 번째 컬럼의 값을 기준으로 내림차순 정렬합니다.
data.sort((a, b)=>{
if(a[col-1] === b[col-1]) return b[0] - a[0];
return a[col-1] - b[col-1];
});
let tmp = [];
for(let i = row_begin; i<=row_end; i++){
const s_i = data[i-1].reduce((acc, cur)=> acc += cur % i, 0);
tmp.push(s_i);
}
// row_begin ≤ i ≤ row_end 인 모든 S_i를 누적하여 bitwise XOR 한 값을 해시 값으로서 반환합니다.
let ret = tmp.reduce((acc,cur)=>acc^cur);
return ret;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 2️⃣ - 광물 캐기 (0) | 2024.05.21 |
---|---|
Level 2️⃣ - 디펜스 게임 (0) | 2024.05.21 |
Level 2️⃣ - 캐시 (2018 KAKAO BLIND RECRUITMENT) (0) | 2024.05.16 |
Level 2️⃣ - 리코쳇 로봇 (0) | 2024.04.25 |
Level 2️⃣ - 수식 최대화 (0) | 2024.04.24 |