[프로그래머스] LV 2 테이블 해시 함수

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

접근 방법

  1. data배열의 길이는 최대 2500, 각 data의 원소인 배열의 길이는 최대 500
  2. 따라서 시키는대로 구현하면 된다
  3. 연산에 사용되는 index와 실제 저장되는 index의 차이를 잘 생각하면된다

코드

import java.util.*;
class Solution {
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        Arrays.sort(data, (o1, o2) -> {
            if(o1[col-1] == o2[col-1]) return o2[0] - o1[0];
            return o1[col-1] - o2[col-1];
        });
        
        row_end--; row_begin--;
        int hash = getSum(data[row_begin], row_begin+1);
        
        for(int i = row_begin+1 ; i <= row_end ; i++){
            int sum = getSum(data[i], i+1);
            hash ^= sum;
        }
        
        return hash;
    }
    int getSum(int[] data, int mod){
        int sum = 0;
        for(int i = 0 ; i < data.length ; i++) sum += data[i] % mod;
        return sum;
    }
}