코딩/코딩테스트
백준 1931번: 회의실 배정
yesman9
2024. 6. 18. 18:41
회의 시간이 끝나는 순서대로 정렬해서, 이 순서대로 회의를 할 수 있는지 봐야한다.
문제 input을 정렬한 결과. input 자체와 같다
[1, 4]
[3, 5]
[0, 6]
[5, 7]
[3, 8]
[5, 9]
[6, 10]
[8, 11]
[8, 12]
[2, 13]
[12, 14]
Compartor 클래스의 compare메소드를 구현하여 정렬 기준을 직접 작성할 수 있다
https://momonote2.tistory.com/64
배열의 정렬 (Arrays.sort , Comparator, compareTo , compare)
배열을 오름차순으로 정렬하기 위해선 util.Arrays를 import하고 Arrays.sort(arr); 를 하면된다. 배열을 내림차순으로 정렬하기 위해 Collections.reverseOrder() 사용한다. 이때 배열은 원시타입을 사용하면 안
momonote2.tistory.com
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.StringTokenizer;
class Meeting {
int startTime;
int endTime;
public Meeting(int startTime, int endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 입력
int n = Integer.parseInt(br.readLine());
List<Meeting> meetings = new ArrayList<>();
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int startTime = Integer.parseInt(st.nextToken());
int endTime = Integer.parseInt(st.nextToken());
meetings.add(new Meeting(startTime, endTime));
}
// 끝나는 시간 기준으로 정렬
Collections.sort(meetings, new Comparator<Meeting>() {
@Override
public int compare(Meeting a, Meeting b) {
if (a.endTime == b.endTime) {
return a.startTime - b.startTime; // 끝나는 시간이 같으면 시작 시간 오름차순 정렬
} else {
return a.endTime - b.endTime; // 끝나는 시간 기준 오름차순 정렬
}
}
});
int count = 0;
int currTime = -1;
// 그리디 알고리즘 적용
for (Meeting meeting : meetings) {
if (meeting.startTime >= currTime) { // 회의 시작시간이 현재시간보다 늦을 경우
currTime = meeting.endTime; // 이 회의가 끝나는 시간으로 현재 시간 업데이트
count++;
}
}
bw.write(String.valueOf(count));
bw.flush();
bw.close();
br.close();
}
}