forDevLife
[백준] 1931 - 회의실 배정 (자바) 본문
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
//배열 개수 선언, int[N][0] = 시작점, int[N][1] = 종료점
int[][] arr = new int[N][2];
StringTokenizer st;
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine(), " ");
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
//끝 점이 동일하면, 시작점이 빠른 순서로 정렬
if(o1[1] == o2[1]) {
return o1[0] - o2[0];
} else
return o1[1] - o2[1];
}
});
int count = 0;
int finish_line = 0;
for(int i=0; i<N; i++) {
if(finish_line <= arr[i][0]) {
count++;
finish_line = arr[i][1];
}
}
System.out.print(count);
}
}
- arr[i][1], 즉 끝나는 시간 기준으로 정렬하기 위해, compare 재정의가 필요하다.
- return o1[1] - o2[1]로 끝나는 시간 기준 오름차순으로 정렬된다.
- 2차원 배열일 경우에 Arrays.sort에 new Comparator를 전달하여 재정의할 수 있다.
- sorting 하고자 하는 2차원 배열 'arr'은 1차원 배열 int[]로 이루어져 있다. 따라서 new Comparator<int[]>로 작성하여, compare에서 int[]를 기준으로 정렬을 진행해야 한다.
- 즉, sort의 두 번째 인자로는 2차원 배열 내의 정렬 대상(여기에서는 1차원 배열 int[])이 와야한다.
- 헷갈리면 : dundung.tistory.com/112
- 기본적으로 오름차순
- return o1[0] - o2[0] 결과가 > 0 : 앞에가 크다는 의미로, 양수 반환하여 내림차순됨
- return o1[0] - o2[0] 결과가 < 0 : 뒤에가 크다는 의미로, 음수 반환하여 오름차순(그대로 유지)
'알고리즘' 카테고리의 다른 글
[백준] 13305 - 주유소 (자바) (0) | 2021.05.01 |
---|---|
[백준] 1541 - 잃어버린 괄호 (자바) (0) | 2021.04.30 |
[백준] 11399 - ATM (자바) (0) | 2021.04.30 |
[백준] 11047 - 동전0 (자바) (0) | 2021.04.30 |
[코드업] 기초 100제 JAVA (0) | 2021.04.26 |
Comments