완호가 관리하는 어떤 데이터베이스의 한 테이블은 모두 정수 타입인 컬럼들로 이루어져 있습니다. 테이블은 2차원 행렬로 표현할 수 있으며 열은 컬럼을 나타내고, 행은 튜플을 나타냅니다.
첫 번째 컬럼은 기본키로서 모든 튜플에 대해 그 값이 중복되지 않도록 보장됩니다. 완호는 이 테이블에 대한 해시 함수를 다음과 같이 정의하였습니다.
1. 해시 함수는 col, row_begin, row_end을 입력으로 받습니다.
2. 테이블의 튜플을 col번째 컬럼의 값을 기준으로 오름차순 정렬을 하되, 만약 그 값이 동일하면 기본키인 첫 번째 컬럼의 값을 기준으로 내림차순 정렬합니다.
3. 정렬된 데이터에서 S_i를 i 번째 행의 튜플에 대해 각 컬럼의 값을 i 로 나눈 나머지들의 합으로 정의합니다.
4. row_begin ≤ i ≤ row_end 인 모든 S_i를 누적하여 bitwise XOR 한 값을 해시 값으로서 반환합니다.
테이블의 데이터 data와 해시 함수에 대한 입력 col, row_begin, row_end이 주어졌을 때 테이블의 해시 값을 return 하도록 solution 함수를 완성해주세요.
문제풀이
문제 요구사항에 따라 1, 2, 3, 4를 순서대로 차근차근 기능을 구현하면 간단히 풀리는 문제.
처음에는 배열을 새롭게 재정의 하려 했지만 그럴필요가 없다는 사실을 깨닫고 정렬 기준만 만든 후 접근했다.
다음과 같이 구성해 줬고, 정렬의 첫번째 기준이 되는 col에 해당하는 숫자와, 그 다음 숫자, 그리고 그 행의 index를 넣어주고 이 튜플들로 이루어진 벡터를 정렬하여 풀었다.