알고리즘/프로그래머스 Level2

[프로그래머스 ,Java] Level2: 테이블 해시 함수

류창 2022. 12. 22. 22:46

 

문제분석

 

테이블 해시 함수 로직을 구현하는 문제이다.

 

다르게 생각할필요는없다. 문제에서 하라는대로만 하면 끝이다.

 

이 문제를 들고온 이유는 새롭게 배운 두가지 테크닉을 작성하는겸 소개해드리고싶어서다.

 

 

먼저, 2번부터 로직을 시행할것이다.

 

2번의 요건은   col번째 요소로 정렬을하고,  동일하면 기본키(첫번째)로 정렬하는 문제다.

 

즉, 이중 정렬을 원하신다.

 

보통, 필자는 이중정렬을 거의 Comparator을 구현해서 표현했다.

이렇게다.  왜냐하면, 이중정렬을 람다식으로 불가능한거 아닌가? 싶엇다.

 

하지만, 웬걸 이중정렬도 람다식이 된다. 이걸 이제알았다니 ..

삼항 연산자로 가능하다.

 

 

3번과 4번을 동시에 처리하겠다.

 

각 컬럼을 mod idx하고 나온 값들을 XOR 한 최종값을 출력하는것이다.

 

자바에선 XOR 연산을 ^ 기호가 지원해주니, 편하게 사용하자.

 

 

전체풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
class Solution {
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        int answer = 0;
        
        Arrays.sort(data,(s1,s2)->
                    s1[col-1]==s2[col-1]?s2[0]-s1[0]:s1[col-1]-s2[col-1]);
        
        for(int i=row_begin-1;i<=row_end-1;i++){
            
            int[] temp = data[i];
            int hash=0;
            
            for(int j=0;j<temp.length;j++){
                hash+=temp[j]%(i+1);
            }
            answer=answer^hash;
        }
        
        
        
        return answer;
    }
}
cs