- 생각
끝난 시간이 빠를 수록 다음 시작 시간이 빠르기 때문에 정렬이 필요.
내가 쓴 정렬 방법은 종료시간 정렬 후 종료 시간이 같은 경우에 시작시간에 따라 정렬했다.
- 코드
정답 코드 : 정렬 후 회의실 최대 개수를 구해줌.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[][] array;
public static void main(String[] args) throws Exception {
SetData();
System.out.println(ReturnMaxMeetingRoom());
}
private static void SetData() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
N = Integer.parseInt(br.readLine());
array = new int[N][2];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
array[i][0] = Integer.parseInt(st.nextToken());
array[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(array, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
int result = o1[1] - o2[1];
if (result != 0) return o1[1] - o2[1]; //종료시간에 따라 정렬
return o1[0] - o2[0]; //만약 비교하는 값의 종료시간이 같을 경우 시작시간으로 정렬
}
});
}
private static int ReturnMaxMeetingRoom() {
int count = 0; // 최대값 변수
int temp = -1; // 다음시작 시간과 비교할 변수
for (int i = 0; i < N; i++) {
//현재 시작시간이 이전 종료시간보다 늦을 경우
if (array[i][0] >= temp) {
temp = array[i][1];
count++;
}
}
return count;
}
}
'algorithm' 카테고리의 다른 글
[JAVA] 백준 20004번 : 베스킨라빈스 31 (0) | 2020.12.07 |
---|---|
[JAVA] 백준 14241번 : 슬라임 합치기 (0) | 2020.12.07 |
[JAVA] 백준 11399번 : ATM (0) | 2020.12.04 |
[JAVA] 백준 3036번 : 링 (0) | 2020.12.03 |
[JAVA] 백준 2089번 : -2진수 (2) | 2020.12.03 |