Lewis's Tech Keep
[프로그래머스][JAVA] 테이블 해시 함수 본문
링크
https://school.programmers.co.kr/learn/courses/30/lessons/147354
설명
문제에 나온 조건을 먼저 읽어봅니다.
1. 해시 함수는 col, row_begin, row_end을 입력으로 받습니다.
2. 테이블의 튜플을 col번째 컬럼의 값을 기준으로 오름차순 정렬을 하되, 만약 그 값이 동일하면 기본키인 첫 번째컬럼의 값을 기준으로 내림차순 정렬합니다.
3. 정렬된 데이터에서 S_i를 i 번째 행의 튜플에 대해 각 컬럼의 값을 i 로 나눈 나머지들의 합으로 정의합니다.
4. row_begin ≤ i ≤ row_end 인 모든 S_i를 누적하여 bitwise XOR 한 값을 해시 값으로서 반환합니다.
먼저, 입력으로 받아 List<int[]> dataInfo 배열에 저장해줍니다.
그리고 필요로 하는 조건들을 만족하기 위해 정렬 기준을 잡아줍니다.
1. 입력받은 col 값 기준으로 오름차순 정렬
2. col 값이 같다면 첫 번째 컬럼 값을 기준으로 내림차순 정렬
반복문을 돌면서 각 숫자 % mod 의 합으로 값을 저장해줍니다.
다 저장됐다면 기존 XOR 연산에 계속해서 XOR 연산을 누적해줍니다. (a ^ b)
결과값을 반환합니다.
풀이
더보기
더보기
import java.util.*;
class Solution {
public int solution(int[][] data, int col, int row_begin, int row_end) {
List<int[]> dataInfo = new ArrayList<>();
for (int[] dataRow: data) {
dataInfo.add(dataRow);
}
Collections.sort(dataInfo, (d1, d2) -> {
if (col-1 == 0) {
return d1[0] - d2[0];
}
int cmp = Integer.compare(d2[col-1], d1[col-1]);
if (cmp != 0) {
return d1[col-1] - d2[col-1];
} else {
return d2[0] - d1[0];
}
});
int XOR = 0;
for (int i=row_begin-1 ; i<row_end; i++) {
int[] row = dataInfo.get(i);
int rowHash = 0;
for (int j=0; j<row.length; j++) {
int hashValue = row[j] % (i + 1);
rowHash += hashValue;
}
XOR = XOR ^ rowHash;
}
return XOR;
}
}
'Java > 알고리즘' 카테고리의 다른 글
[프로그래머스][JAVA] 디펜스 게임 (0) | 2024.08.06 |
---|---|
[프로그래머스][JAVA] 택배 배달과 수거하기 (0) | 2024.08.06 |
[프로그래머스][JAVA] 이모티콘 할인행사 (0) | 2024.08.04 |
[프로그래머스][JAVA] 시소 짝꿍 (0) | 2024.07.31 |
[프로그래머스][JAVA] 숫자 변환하기 (0) | 2024.07.31 |
Comments