새소식

항해 99 TIL

99클럽 코테 스터디 6일차 TIL [Arrays.sort]

  • -
- 오늘의 학습 키워드 : 배열 정렬

 

[문제 이름 : 테이블 해시 함수]

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

내가 작성한 코드는 아래와 같다.

import java.util.*;

class Solution {
    public int solution(int[][] data, int col, int row_begin, int row_end) {
        Nums[] numsArray = new Nums[data.length];
        for (int i = 0; i < data.length; i++) {
            numsArray[i] = new Nums(data[i][col - 1], data[i]);
        }

        Arrays.sort(numsArray);

        int answer = 0;

        for (int i = row_begin - 1; i < row_end; i++) {
            int[] row = numsArray[i].arr;
            int sum = 0;
            for (int value : row) {
                // (i + 1)은 실제 행 번호와 일치하도록 수정
                sum += value % (i + 1);
            }
            // XOR 연산
            answer ^= sum; 
        }

        return answer;
    }

    static class Nums implements Comparable<Nums> {
        // 정렬하고자 하는 값
        int value;
        int[] arr;

        public Nums(int value, int[] arr) {
            this.value = value;
            this.arr = arr;
        }

        @Override
        public int compareTo(Nums other) {
            if (this.value == other.value) {
                // 기본키 기준 내림차순
                return other.arr[0] - this.arr[0]; 
            } else {
                // 주어진 컬럼 기준 오름차순
                return this.value - other.value; 
            }
        }
    }
}

문제에서 원하는 조건대로 정렬을 해주기 위해, Nums라는 클래스를 만들어주고, 여기에 정렬을 위한 기준값(value)와 1차원 배열의 정보를 저장한다. 이후 배열을 정렬하고, 나머지 합을 XOR한다.

 

다른 개발자의 풀이 코드를 보니, Arrays.sort로 문제를 해결할 수도 있었다.

 Arrays.sort(data, (a, b) -> {
            if (a[col - 1] == b[col - 1]) {
                return b[0] - a[0]; // 첫 번째 컬럼을 기준으로 내림차순
            } else {
                return a[col - 1] - b[col - 1]; // col번째 컬럼을 기준으로 오름차순
            }
        });

단순히 Arrays.sort(data);만 사용해봤는데, 이렇게 사용자 정의를 통해 정렬을 바로 작업할 수 있는 방법도 있다는 것을 깨달았다.

 

내일은 Arrays 클래스에서 사용할 수 있는 다른 메서드들에 대해 정리해보려 한다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.