코딩 테스트

(Java) 프로그래머스 - 테이블 해시 함수

로승리 2023. 7. 19. 18:17

문제에 각 단계에 맞게 계산하는 쉬운 문제였다.

오랜만에 Comparator를 사용하는 것과 비트 연산이 나와서 재밌었다.

다만 문제 설명이 친절하지는 않아서 예시를 보며 풀었다.

 


로직

문제 각 단계에 맞게 로직을 작성하면 된다.

1. Comparator를 사용하여 문제에 제시된 대로 정렬하면 된다.

2. 배열을 순회하며 값을 찾아 list에 넣는다.

주의해야 할 것은 각 컬럼의 값이 0부터가 아니라 1부터이고

주어진 타입은 배열이기 때문에 col, row_begin, row_end 값을 보정해야 한다.

3. list를 순회하며 answer에 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 o1[col - 1] - o2[col - 1];
			} else {
				return o2[0] - o1[0];
			}
		});
		
        // 나머지 합 구하기
		List<Integer> list = new ArrayList<>();
		for (int i = row_begin - 1; i <= row_end - 1; i++) {
			int temp = 0;
			for (int j = 0; j < data[i].length; j++) {
				temp += data[i][j] % (i + 1);
			}
			list.add(temp);
		}
		
        // XOR 연산
		for (int i : list) {
			answer ^= i;
		}

		return answer;
    }
}