https://www.acmicpc.net/problem/1931
public class s_1931 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int ans = 0;
int[][] arr = new int[n][2];
for (int i = 0; i < n; i++) {
StringTokenizer 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];
}
return o1[1] - o2[1];
}
});
int pre_end_time = 0;
for (int i = 0; i < n; i++) {
// 직전 종료시간이 다음 회의 시작 시간보다 작거나 같다면 갱신
if (pre_end_time <= arr[i][0]) {
pre_end_time = arr[i][1];
ans++;
}
}
System.out.println(ans);
}
}
회의에 시작시간과 끝나는 시간을 주고 회의시간이 겹치지않는 선에서 최대 회의개수를 구하는 문제이다.
시작시간과 끝나는 시간을 기준으로 2차원 배열을 만들고, 정렬을 overrive 하여 종료시간이 같으면 시작시간이 빠른순으로 정렬하게 한다.
이후 for문을 돌려서 for문의 이전 끝나는회의시간이 다음 회의시간보다 작거나 같다면 종료시간을 갱신하고 ans을 +1하면 된다.
'Koala - 10기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/Python] 16395 : 파스칼의 삼각형 (1) | 2023.03.16 |
---|---|
[백준/JAVA] #3273 두 수의 합 (0) | 2023.03.13 |
[백준/Python] MooTube (Silver) 15591번 (0) | 2023.03.13 |
[백준/Python] #1895 필터 (0) | 2023.03.12 |
[백준 / python] #13423: Three Dots (0) | 2023.03.12 |