본문 바로가기
알고리즘/프로그래머스 LV2

프로그래머스 : 테이블 해쉬 함수 ( LV 2 )

by 꽃요미 2025. 1. 13.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

* LV2 문제. 문제를 집중력있게 꼼꼼히 읽는 연습을 해야겠다. 삼성 코딩테스트에서도 느꼈지만 문제 읽고 정리하는게 반이자 시작이다.

* 문제를 요약하자면 2차원 배열 data[][]가 주어지고 Col 값과 Row값 시작값과 끝값이 주어진다.

* 처음에 data[][] 배열을 Col값을 기준으로 오름차순 정렬을 해준다.

* 만약에 Col값 기준으로 두 값이 같다면,  첫번째 원소값으로 내림차순 정렬하면 된다.

 -> 사실 위 내용이 문제의 전부라고 봐도 무방하다.

* 정렬이 완료되면 문제에서 나와있는것 처럼 Row값으로 Mod 연산을 진행하고 변수에 더해주면된다.

*마지막으로 XOR 연산( ^ ) 을 결과 변수에 더해주고 끝낸다

 

* Comparable<Class> 를 구현해서 오름차순, 내림차순 구현은 해봤지만 Comparator를 람다식으로 구현해서 사용한것은 처음이다.

아래 코드를 남기고 여러번 보자.

 

int void solution(int[][] data, int col, int startRow, int endRow) {
	Arrays.sort(data, (a,b) -> {
    	if(a[col-1] != b[col-1]) {
        	return Integer.compare(a[col-1], b[col-1]);
        }
        else {
        	return Integer.compare(b[0], a[0]);
        }
    });
    
    // remain codes...
}

 

* 의외로 Comparable 클래스 구현과 비슷하다.

* Col은 0-Based index니까 Col-1 값을 비교해서 값이 다르면 오름차순 정렬, 같다면 0-index와 배열의 인자를 반대로 넣어서 내림차순 정렬을 진행한다.

* 이차원 배열을 정렬할때 사용하면 되니까 잘 기억해놓고 시험에 나오면 사용하면 좋을것 같다.