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

홍성진·2023년 2월 16일
0

0. 문제 링크 & 설명

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

주어진 2-dimensional array를 조건에 맞게 정렬한 뒤 비트연산을 수행해야 하는 문제입니다.


1. 정렬

<문제 요구사항>
테이블의 튜플을 col번째 컬럼의 값을 기준으로 오름차순 정렬을 하되, 만약 그 값이 동일하면 기본키인 첫 번째 컬럼의 값을 기준으로 내림차순 정렬합니다.

col번째 컬럼첫번째 컬럼 두 가지 조건이 있기 때문에 정렬을 위해 Comparator interface의 compare method를 override했습니다. compare method는 두 가지 인자를 받는데, 앞이 크면 양수를, 뒤가 크면 음수를, 같으면 0을 리턴하도록 작성하면 됩니다.


2. 비트연산

비트연산은 연산자별 기능만 가볍게 정리하도록 하겠습니다. 본 문제에서는 XOR 연산이 요구되었습니다.

operatorresult
&AND 연산
|OR 연산
^XOR 연산
~비트 반전
<<비트 열을 왼쪽으로 이동
>>비트 열을 오른쪽으로 이동

3. JAVA 코드

import java.util.*;

class Solution {
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        int answer = 0;
        int[][] reversed = new int[data.length][data[0].length];
        
        sortbyColumn(data, col - 1);
        
        for (int i = row_begin - 1; i < row_end; i++) {
            int cur = 0;
            for (int j = 0; j < data[0].length; j++) {
                cur += data[i][j] % (i + 1);
            }
            answer ^= cur;
        }
        
        return answer;
    }
    
    
    
    public void sortbyColumn(int[][] data, int col) {
        Arrays.sort(data, new Comparator<int[]>() {
            
          @Override              
          public int compare(final int[] entry1, final int[] entry2) {
            if (entry1[col] > entry2[col]) {
                return 1;
            } else if (entry1[col] == entry2[col]) {
                if (entry1[0] < entry2[0]) {
                    return 1;
                } else {
                    return -1;
                }
            } else {
                return -1;
            }
          }
            
        });
    }
}

0개의 댓글