반응형
https://school.programmers.co.kr/learn/courses/30/lessons/147354
package Programmers;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class 테이블해시함수 {
public static void main(String[] args){
int[][] data = {{2,2,6},{1,5,10},{4,2,9},{3,8,3}};
int col = 2;
int row_begin = 2;
int row_end = 3;
테이블해시함수 T = new 테이블해시함수();
T.solution(data, col, row_begin, row_end);
//{4, 2, 9}, {2, 2, 6}, {1, 5, 10}, {3, 8, 3}
}
public int solution(int[][] data, int col, int row_begin, int row_end) {
int answer = 0;
//1. 정렬(col번째 기준으로 오름차순 정렬하고 값이 동일하면 첫번째 컬럼 기준으로 내림차순정렬)
Arrays.sort(data, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[col - 1] == o2[col - 1]){
return o2[0] - o1[0];
}
return o1[col - 1] - o2[col - 1];
}
});
List<Integer> modArr = new ArrayList<>();
//2. begin ~ end 까지 Mod 합을 modArr 배열에 집어넣는다.
for (int i = row_begin-1; i <= row_end-1; i++) {
int sum = 0;
for (int j = 0; j < data[0].length; j++) {
int tempMod = data[i][j] % (i+1);
sum += tempMod;
}
modArr.add(sum);
}
//3. modArr에 집어넣은 합 들을 하나씩 꺼내면서 XOR 연산해서 answer 에 넣어준다.
answer = modArr.get(0);
for (int i = 1; i < modArr.size(); i++) {
answer ^= modArr.get(i);
}
return answer;
}
}
1. 기준에맞게 정렬
- 주어진 col 기준으로 오름차순 정렬
- 같다면 첫번째 컬럼 기준으로 내림 차순 정렬한다.
Comparator 활용해서 2차원 배열 정렬함.
2. List 만들어서 row_begin ~ row_end 까지 배열 탐색하면서 해당 튜플의 값들을 % 연산해서 modArr에 집어넣는다.
3. 만들어진 modArr 집합을 하나씩 꺼내서 XOR 연산해준다.
※ 문제이해하는데만 한시간 걸린듯
정렬하라는데 뭔소리인지 몰라서 해맴 XOR 연산이 뭔가 하고 또 찾아봄 이해하면 금방 푸는 문제
data[i][j] 면 j값 = col 변수다 j값 줄테니 그거대로 오름차순 내림차순 정리하고 조건하나 더줄테니 그때는 첫번째 0번 인덱스 값 따라서 정렬하라는 거다.
반응형
'기타 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 -명예의전당 (Java) queue - Lv.1 (0) | 2023.05.01 |
---|---|
[알고리즘] 프로그래머스 - 점찍기 (Java) (0) | 2023.04.30 |
[알고리즘] 프로그래머스 - 마법의엘리베이터 (0) | 2023.04.27 |
[알고리즘] 프로그래머스 - 이모티콘할인행사 (java) - dfs 탐색 (0) | 2023.04.26 |
[알고리즘] 프로그래머스 -택배 배달과 수거하기 (Java) (0) | 2023.04.25 |