2차원 배열 정렬하는법
1. Comparator
Arrays.sort(arr, (o1, o2) -> {
if (o1[0] == o2[0])
return o1[1] - o2[1];
else
return o1[0] - o2[0];
});
o1[0] - o2[1] 부분을 Integer.compare(o1[1], o2[1])로 바꿔도 된다.
한가지 기준으로만 정렬할 경우 아래와 같이 쓸수도 있다.
Arrays.sort(arr, Comparator.comparing(o1->o1[1]));
1번째 element를 기준으로 정렬한다는 의미
2. 람다식
Arrays.sort(arr, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0]);
아래의 강의실 배정 코드에서는 람다식을 사용함 Comparator을 넣어도 결과는 동일
강의실 배정 코드
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Scanner;
public class No11000{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] arr = new int[N][2];
for(int i=0; i<N; i++){
arr[i][0] = sc.nextInt();
arr[i][1] = sc.nextInt();
}
//시작시간 순서대로 정렬
Arrays.sort(arr, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0]);
PriorityQueue<Integer> q = new PriorityQueue<>();
for (int i=0; i<N; i++){
if(!q.isEmpty() && q.peek() <= arr[i][0]) {
q.poll();
}
q.add(arr[i][1]);
}
System.out.println(q.size());
}
}
큐에 들어갈 강의의 시작시간이 이미 큐에 있던 강의의 끝나는 시간과 같거나 늦다면 기존 강의실을 이용한다.
(기존 강의를 poll하고 새로운 강의를 add 하면 된다.)
'코딩테스트' 카테고리의 다른 글
[완전탐색] 백준 2503번 숫자야구 (0) | 2022.10.06 |
---|---|
[완전탐색] 백준 2231번 분해합 (0) | 2022.10.06 |
[그리디] 프로그래머스 체육복 (0) | 2022.10.04 |
[그리디] 백준 13305번 주유소 (0) | 2022.09.25 |
[그리디] 백준 11047번 동전0 (1) | 2022.09.25 |
댓글