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와 배열의 인자를 반대로 넣어서 내림차순 정렬을 진행한다.
* 이차원 배열을 정렬할때 사용하면 되니까 잘 기억해놓고 시험에 나오면 사용하면 좋을것 같다.
'알고리즘 > 프로그래머스 LV2' 카테고리의 다른 글
프로그래머스 뒤에 있는 큰 수 찾기 ( LV 2 ) (1) | 2025.01.21 |
---|---|
프로그래머스 귤 고르기 ( LV 2 ) + entrySet() 활용 (0) | 2025.01.21 |
프로그래머스 : 연속 부분 수열 합의 갯수 ( LV 2 ) (1) | 2025.01.19 |
프로그래머스 : 숫자 변환하기 ( LV 2 ) (0) | 2025.01.14 |
프로그래머스 : 뒤에 있는 큰수 찾기 ( LV 2 ) (0) | 2025.01.06 |