출처: https://bumcrush.tistory.com/182 [맑음때때로 겨울]
반응형

 

https://school.programmers.co.kr/learn/courses/30/lessons/147354

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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번 인덱스 값 따라서 정렬하라는 거다.

반응형

+ Recent posts