[문제 링크]
https://www.acmicpc.net/problem/1931
[난이도]
- Silver 1
[알고리즘]
- 그리디
[코드]
import java.io.*;
import java.util.*;
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[][] meetings = new int[N][2];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
meetings[i][0] = Integer.parseInt(st.nextToken());
meetings[i][1] = Integer.parseInt(st.nextToken());
}
// 끝나는 시간을 기준으로 정렬, 끝나는 시간이 같으면 시작 시간을 기준으로 정렬
Arrays.sort(meetings, (a, b) -> {
if (a[1] == b[1]) {
return Integer.compare(a[0], b[0]);
}
return Integer.compare(a[1], b[1]);
});
int count = 0;
int lastEndTime = 0;
for (int i = 0; i < N; i++) {
if (meetings[i][0] >= lastEndTime) {
lastEndTime = meetings[i][1];
count++;
}
}
System.out.println(count);
}
}
[풀이]
정렬을 할 때 끝나는 시간을 기준으로 오름차순 정렬을 해준다.
그 후 현재시간이 0이라고 할 때 해당 배열의 시작 시간이 현재시간보다 크거나 같을 경우 현재시간을 해당 배열의 끝나는시간으로 변경해준다. 변경될 때 마다 count를 늘려준다.
'코딩테스트' 카테고리의 다른 글
백준 14502 : 연구소 [JAVA] (0) | 2024.08.09 |
---|---|
백준 1446 : 지름길 [JAVA] (0) | 2024.07.05 |
백준 2156 : 포도주 시식 [JAVA] (0) | 2024.06.27 |
백준 2529 : 부등호 [JAVA] (0) | 2024.06.21 |
백준 2023 : 신기한 소수 [JAVA] (0) | 2024.06.20 |