프로그래머스 - 테이블 해시 함수 - bitwise XOR - Java

chaemin·2024년 4월 23일
0

프로그래머스

목록 보기
24/64

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/147354?language=java

2. 풀이

배열 정렬까지는 잘 했는데 xor 연산자에서 막혔다.. 기초에서 막히다니. 앞으로 기초에서 틀리는 일이 없도록 하자!

✨핵심 Point

  1. 제한 사항을 꼼꼼하게 읽자.
    배열은 0부터 시작인데 주어지는 값들은 1부터이다. 따라서 col, row_begin, row_end 등의 값은 -1을 해줘야 한다.
  1. XOR 연산은 ^이루어 진다.
row_begin ≤ i ≤ row_end 인 모든 S_i를 누적하여 bitwise XOR 한 값을 해시 값으로서 반환합니다.

여기서 살짝 헷갈렸는데 즉 모든 S_i를 누적할때마다 그 값을 XOR해서 넣어주는 것이다.

for(int i = row_begin - 1; i < row_end; i++){
    int sum = 0;
    for(int j = 0; j < data[i].length; j++){
        sum += (data[i][j] % (i+1));
    }
    answer ^= sum;
}

3. 전체코드

import java.util.*;

class Solution {
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        int answer = 0;
        
        Arrays.sort(data, new Comparator<int[]>(){
           @Override
            public int compare(int[] o1, int[] o2){
                
                if(o1[col-1] == o2[col-1]){
                    return o2[0]-o1[0];
                }
                
                return o1[col-1]-o2[col-1];
            }
        });
        
        for(int i = row_begin - 1; i < row_end; i++){
            int sum = 0;
            for(int j = 0; j < data[i].length; j++){
                sum += (data[i][j] % (i+1));
            }
            answer ^= sum;
        }
        return answer;
    }
}

0개의 댓글