Level 2️⃣ - 테이블 해시 함수

2024. 5. 20. 18:12알고리즘/프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/147354

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

🚀문제 접근

비트 연산자 를 활용하는 문제이다.

문제는 요구사항대로 구현만 하면 된다. 비트 연산자에 대해 잘 알지 못했는데 공부할 수 있는 기회가 되었다.

 

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;
}