본문 바로가기

코딩 테스트/프로그래머스

[프로그래머스] 테이블 해시 함수

반응형

문제

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

 

프로그래머스

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

programmers.co.kr

문제 분석

[제한 사항]

  • 1 ≤ data의 길이 ≤ 2,500
  • 1 ≤ data의 원소의 길이 ≤ 500
  • 1 ≤ data[i][j] ≤ 1,000,000
    • data[i][j]는 i + 1 번째 튜플의 j + 1 번째 컬럼의 값을 의미합니다.
  • 1 ≤ col ≤ data의 원소의 길이
  • 1 ≤ row_begin ≤ row_end ≤ data의 길이

주어진 이차원 배열인 data 를 col 기준으로 오름차순 정렬하되, 값이 동일할 경우에는 첫 번째 컬럼을 기준으로 내림차순하여 정렬한다.

정렬된 데이터에서 S_i 를 i 번째 행의 튜플에 대해 각 컬럼의 값을 i 로 나눈 나머지들의 합으로 정의한다.

이때 row_begin ~ row_end 사이의 모든 S_i 누적하여 XOR 한 값을 해시 값으로서 반환한다.

 

문제 접근

해당 문제는 문제에서 시키는 그대로 하면 문제를 풀 수 있다.

1. data 를 조건에 따라 정렬한다.

2. S_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 o1[col-1] - o2[col-1];
            }else{
                return o2[0] - o1[0];
            }
        });
        
        for(int i=row_begin; i<=row_end; i++){
            int sum = 0;
            for(int n : data[i-1]){
                sum += n % i;
            }
            
            answer = answer ^ sum;
        }

        return answer;
    }
}

 

 

반응형