코딩/코딩테스트

백준 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();
	}
}