프로그래머스 테이블 해시 함수

피나코·2022년 12월 23일
0

알고리즘

목록 보기
27/46
post-thumbnail

프로그래머스 테이블 해시 함수 바로가기

문제 설명

이차원 배열을 DB테이블 처럼 쓴다고 한다.

행은 튜플, 열은 컬럼을 나타낸다.

  1. 해시 함수는 colrow_beginrow_end을 입력으로 받습니다.
  2. 테이블의 튜플을 col번째 컬럼의 값을 기준으로 오름차순 정렬을 하되, 만약 그 값이 동일하면 기본키인 첫 번째 컬럼의 값을 기준으로 내림차순 정렬합니다.
  3. 정렬된 데이터에서 S_i를 i 번째 행의 튜플에 대해 각 컬럼의 값을 i 로 나눈 나머지들의 합으로 정의합니다.
  4. row_begin ≤ i ≤ row_end 인 모든 S_i를 누적하여 bitwise XOR 한 값을 해시 값으로서 반환합니다.

위 과정을 거친 값을 출력하면 된다.

접근 방식

간단한 구현 문제이다.

먼저 2번 조건에 맞게 sort를 해준다.

그리고 3,4번 과정을 진행하면 된다.

코드

import java.util.*;

class Solution {
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        int answer = 0;
        Arrays.sort(data, (o1, o2) -> {return (o1[col-1] == o2[col-1] ? o2[0] - o1[0] : o1[col-1] - o2[col-1]);});
        for(int i = row_begin - 1 ; i < row_end; i++){
            int sum = 0;
            for(int column : data[i]) sum += (column % (i + 1));
            answer ^= sum;
        }
        return answer;
    }
}

Disscussion

최근 Level2 문제 치고는 쉬운 편이었다.

profile
_thisispinako_

0개의 댓글