[Programmers] 테이블 해시 함수
2023. 8. 3. 14:54ㆍComputer Sciences/Problem Solve
https://school.programmers.co.kr/learn/courses/30/lessons/147354
문제 설명
처음에 문제를 읽는데 이해가 한 번에 되지 않아 애먹었다. 간단히 정리하면 다음과 같다.
- 주어진 2차원 정수 배열을 정렬한다. 이때 주어진 col 기준 오름차순으로 정렬하되 값이 같다면 기본 키인 첫 번 째 열 기준 내림차순으로 정렬한다.
- 주어진 row_begin부터 row_end까지 행을 순회하면서 각 행의 값들을 해당 행 번호로 mod 연산 한 값을 더한다.
- 만들어진 총합 값들을 모두 XOR연산한다.
2, 3은 단순 for 문으로 금방 해결할 수 있다. 관건은 1번인 2차원 배열 정렬이다. 아마 직접 구현하려면 좀 귀찮을텐데 Java에서 기본 제공하는 Arrays.sort()를 활용하면 간단히 해결할 수 있다.
코드
import java.util.Arrays;
class Solution {
public int solution(int[][] data, int col, int row_begin, int row_end) {
// 1. 튜플 정렬
Arrays.sort(data, (t1, t2) -> {
// 값이 같은 경우 기본 키 기준 내림차순
int result = Integer.compare(t1[col - 1], t2[col - 1]);
if (result == 0) {
return Integer.compare(t2[0], t1[0]);
}
// 다른 경우 해당 컬럼 값 기준 오름차순
return result;
});
// 2. 해시값 계산
int answer = 0;
for (int i = row_begin - 1; i < row_end; i++) {
int s_i = 0;
for (int j = 0; j < data[0].length; j++) {
s_i += data[i][j] % (i + 1);
}
answer ^= s_i;
}
return answer;
}
}
'Computer Sciences > Problem Solve' 카테고리의 다른 글
[Programmers] 최댓값과 최솟값 (0) | 2023.08.04 |
---|---|
[Programmers] 달리기 경주 (0) | 2023.08.04 |
[Programmers] 성격 유형 검사하기 (0) | 2023.08.03 |
[Programmers] 개인정보 수집 유효기간 (0) | 2023.08.02 |
[Programmers] 공원 산책 (0) | 2023.08.02 |