반응형
백준 단계별 풀기에 그리디알고리즘으로 분류되어있는 문제인데, 간단하게 풀릴줄 알았지만 생각보다 시간이 오래 걸렸다.
Comparator의 정렬함수를 적절히 구현하여 간단하게 답을 구했다.
정렬 방식
1. 끝나는 시간이 같을때 => 시작하는 시간이 이른 순서대로
2. 끝나는 시간이 다를때 => 끝나는 시간이 이른 순서대로
1번을 정렬해주는 이유는 시작시간과 끝나는 시간이 같은 경우를 고려해주기 위해서이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class P1931 {
static int N, count, temp;
static int[][] start;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
start = new int[N][2];
for (int i = 0; N > i; ++i) {
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str, " ");
start[i][0] = Integer.parseInt(st.nextToken());
start[i][1] = Integer.parseInt(st.nextToken());
}
// 입력
Comparator<int[]> endSort = new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[1] == o2[1]) { // 끝나는 시간이 같을때
return o1[0] - o2[0]; // 시작시간이 낮은 순서대로 정렬
} else { // 끝나는 시간이 같으면
return o1[1] - o2[1]; // 끝나는 시간 순서로 정렬
}
}
};
Arrays.sort(start, endSort);
temp = start[0][1];
count = 1;
for (int i = 1; N > i; i++) {
if (start[i][0] >= temp) {
count++;
temp = start[i][1];
}
}
System.out.print(count);
}
}
반응형
'컴퓨터 > 백준' 카테고리의 다른 글
JAVA - 백준 알고리즘 - 1700 멀티탭 스케줄링 (0) | 2020.02.26 |
---|---|
JAVA - 백준 알고리즘 - 1080 행렬 (0) | 2020.02.26 |
JAVA - 백준 알고리즘 - 1969 DNA (0) | 2020.02.25 |
JAVA - 백준 알고리즘 - 11399 ATM (0) | 2020.02.25 |
JAVA - 백준 알고리즘 - 1541 잃어버린 괄호 (0) | 2020.02.25 |