그리디 알고리즘 예제 - 4
Last updated
Last updated
n(회의 개수)
A(회의 정보 저장)
A 정렬 # 종료 시각 기준으로 정렬, 종료 시각이 같으면 시작 시각 기준 정렬
for n 반복:
if 앞 회의의 종료 시각보다 시작 시각이 늦은 회의가 나온 경우:
현재 회의의 종료 시각으로 종료 시각 업데이트
진행할 수 있는 회의 수 1 증가
회의 수 출력n = int(input())
A = [[0] * 2 for _ in range(n)]
for i in range(n):
start, end = map(int, input().split())
A[i][0] = end # 종료 시각 우선 정렬이 먼저이므로 0번째에 종료 시각을 먼저 저장
A[i][1] = start
A.sort()
count = 0
end = -1
for i in range(n):
if A[i][1] >= end:
end = A[i][0]
count += 1
print(count)import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
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[][] A = new int[n][2];
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
A[i][0] = start;
A[i][1] = end;
}
//종료 시각 기준 오름차순, 종료 시각이 같으면 시작 시각이 빠른 순서로 정렬
Arrays.sort(A, (o1, o2) -> {
if (o1[1] == o2[1]) {
return o1[0] - o2[0];
}
return o1[1] - o2[1];
});
int count = 0;
int end = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
if (A[i][0] >= end) { //현재 회의 시작 시간과 이전 회의 종료 시간이 겹치지 않으면
end = A[i][1]; //현재 회의의 종료 시간으로 업데이트
count++;
}
}
System.out.println(count);
}
}