본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 테이블 해시 함수

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

 

프로그래머스

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

programmers.co.kr

주어진 조건에 맞게 구현을 하면 되는 문제였다

Arrays.sort(data, (o1, o2) -> {
        if (o1[col-1] == o2[col-1]) {
            return o2[0] - o1[0];
        }
        return o1[col-1] - o2[col-1];
    });

2번 조건을 만족하기 위해 오른차순으로 정렬, 키 값이 동일하면 내림차순으로 정렬

ArrayList<Integer> mods = new ArrayList<>();
for (int i = row_begin; i <= row_end; i++) {
    int mod = 0;
    for (int j = 0; j < data[0].length; j++) {
        mod += data[i-1][j] % i;
    }
    mods.add(mod);
}

이후 각 컬럼의 값을 i로 나눈 나머지의 합을 구해주었다

answer = mods.get(0);
for (int i = 1; i < mods.size(); i++) {
    answer ^= mods.get(i);
}

그 다음 합들을 XOR계산을 하여 답을 구했다

import java.util.*;
class Solution {
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        int answer = 0;
        Arrays.sort(data, (o1, o2) -> {
            if (o1[col-1] == o2[col-1]) {
                return o2[0] - o1[0];
            }
            return o1[col-1] - o2[col-1];
        });
        ArrayList<Integer> mods = new ArrayList<>();
        for (int i = row_begin; i <= row_end; i++) {
            int mod = 0;
            for (int j = 0; j < data[0].length; j++) {
                mod += data[i-1][j] % i;
            }
            mods.add(mod);
        }
        answer = mods.get(0);
        for (int i = 1; i < mods.size(); i++) {
            answer ^= mods.get(i);
        }
        return answer;
    }
}