YataNox
[Java] Lv.2 테이블 해시 함수 본문
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
PriorityQueue를 쓰든 Arrays.sort를 쓰든 Comparator를 이용하여 정렬 기준을 정해주어야한다
col번째 데이터를 기준으로 해당 숫자끼리 비교했을 때 같으면 첫 번째 데이터를 기준으로 내림차순 정렬
아니면 col번째 데이터를 기준으로 오름차순 정렬이다. (배열은 0부터 시작이므로 당연히 col - 1을 기준으로 비교해야한다.)
이후 각 자리수를 row_begin ~ row_end로 나눈 나머지를 각각 더해서 각 숫자를 ^ 연산해주면 끝.
자바 코드
import java.util.*;
class Solution {
public int solution(int[][] data, int col, int row_begin, int row_end) {
int answer = 0;
// data를 람다식으로 정렬
Arrays.sort(data, (o1, o2) -> {
// col번째 데이터를 기준으로 비교하여 숫자가 같으면 첫번째 데이터를 기준으로 내림차순 정렬
if(o1[col - 1] == o2[col - 1])
return o2[0] - o1[0];
// 같지 않다면 해당 col번째 데이터를 기준으로 오름차순 정렬
return o1[col - 1] - o2[col - 1];
});
// row_begin번째 데이터의 sData를 구해서 answer에 미리 저장
answer = getSortData(data[row_begin - 1], row_begin);
// row_begin + 1 자리부터 row_end 자리까지의 데이터를 확인
for(int i = row_begin; i < row_end; i++){
int[] row = data[i];
// 각 컬럼 값을 i로 나눈 나머지 합 구하기
// 구한 값을 기존 answer와 XOR 연산하여 저장
answer = answer ^ getSortData(row, i + 1);
}
return answer;
}
public int getSortData(int[] row, int i){
int sortData = 0;
for(int num : row)
sortData += num % i;
return sortData;
}
}
'코딩 테스트 > PROGRAMMERS' 카테고리의 다른 글
[Java] Lv.2 귤 고르기 (0) | 2024.06.14 |
---|---|
[Java] Lv.2 디펜스 게임 (0) | 2024.06.13 |
[Java] Lv.2 유사 칸토어 비트열 (0) | 2024.06.13 |
[Java] Lv.2 마법의 엘리베이터 (2) | 2024.06.11 |
[Java] Lv.2 택배 배달과 수거하기 (0) | 2024.06.11 |