programmers/Lv 2

테이블 해시 함수 [자바]

Meluu_ 2025. 2. 11. 11:14

 

🧫 문제 분석

✔️ 출처

테이블 해시 함수 level 2

📖 문제

 

매우 간단한 구현문제

 

다만 4번 항목이 헷갈렸다.

모든 S_i를 누적하여 bitwise XOR 한 값을 해시 값으로 반환

S_i를 누적합한다음 XOR 하라는 건가? 싶은데 그건 또 아닌거같아서

 

1번 데이터와 2번 데이터를 XOR 연산 후

그 데이터를 또 3번 데이터와 XOR 연산 .. 이런식이다.

 

 


🔅 문제 풀이

import java.util.Arrays;

class Solution {
    // 해시 함수 매개변수 col, row_begin, row_end
    // col 번째 컬럼 기준 오름차순 , 같다면 기본키(첫번째 컬럼) 기준 내림차순
    // 정렬후 S_i를 i 번째 행의 튜플에 대해 각 컬럼 값을 i로 나눈 나머지들의 합으로 정의
    // row_begin <= i <= row_end 인 모든 S_i 누적, XOR 연산 한 값 반환
    
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        int[] S = new int[row_end - row_begin + 1];
        
        // col 기준 오름차순, 같다면 기본키 기준 내림차순 정렬
        Arrays.sort(data, (o1, o2) -> o1[col - 1] != o2[col - 1] 
                    ? o1[col - 1] - o2[col - 1] 
                    : o2[0] - o1[0]);
        
        // S_i 를 i 번째 행의 튜플에 대해 각 컬럼 값을 i로 나눈 나머지들의 합으로 정의
        for (int i = row_begin - 1; i < row_end; i++) {
            int tmp = 0;
            for (int j = 0; j < data[i].length; j++) {
                tmp += data[i][j] % (i + 1);
            }
            
            // S_i
            S[i - (row_begin - 1)] = tmp;
        } 
        
        // XOR 연산 누적
        int answer = S[0];
        for (int i = 1; i < S.length; i++) {
            answer ^= S[i];
        }
        
        return answer;
    }
}

 

 

 

 

이렇게 하지 않고 바로 XOR 연산 누적하면 된다. 

나는 4번 항목을 잘못 이해해서 저렇게 했다. 

 

❗ 오답노트 / 필요한 지식

 

 

'programmers > Lv 2' 카테고리의 다른 글

가장 큰 정사각형 찾기 [자바]  (0) 2025.02.13
디펜스 게임 [자바]  (1) 2025.02.11
행렬 테두리 회전하기 [자바]  (0) 2025.02.11
다리를 지나는 트럭 [자바]  (0) 2025.02.04
숫자 카드 나누기 [자바]  (1) 2025.02.01