반응형
꽤 오래 걸리긴 했는데, 생각보다 되게 간단한 문제였다.
일단 배열을 정렬한 후 하나씩 넣으면서, 앞서 배정한 회의의 끝나는 시간보다 시작 시간이 더 뒤에 오면서, 회의 진행 시간이 가장 짧은 회의를 배정하면 된다.
그래서 이차원 배열의 개수를 3개로 만들고, 인덱스 0에는 시작 시간, 1에는 끝나는 시간, 2에는 회의 진행 시간을 할당했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.Comparator;
public class AssignConference {
public static int stoi(String str) {
return Integer.parseInt(str);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = stoi(br.readLine());
int last = Integer.MAX_VALUE;
int lastIdx = 0;
int[][] arr = new int[N][3];
for (int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
arr[i][0] = stoi(st.nextToken());
arr[i][1] = stoi(st.nextToken());
if (arr[i][1] <= last) {
last = arr[i][1];
lastIdx = i;
}
arr[i][2] = arr[i][1] - arr[i][0];
}
arr[lastIdx][0] = Integer.MIN_VALUE;
arr[lastIdx][1] = Integer.MIN_VALUE;
Arrays.sort(arr, (o1, o2) -> (o1[1] == o2[1] ? o1[0]-o2[0] : o1[1]-o2[1]));
int count = 1;
for (int i=0; i<N; i++) {
if (arr[i][0] >= last) {
last = arr[i][1];
count++;
}
}
System.out.println(count);
}
}
로그인
www.acmicpc.net
'컴퓨터 공학 > 백준' 카테고리의 다른 글
[백준] JAVA 자바 : 보물 (1026번) (0) | 2024.02.23 |
---|---|
[백준] JAVA 자바 : 잃어버린 괄호 (1541번) (0) | 2024.02.23 |
[백준] JAVA 자바 : 연속합 2 (13398번) (0) | 2024.01.27 |
[백준] JAVA 자바 : 가장 긴 바이토닉 부분 수열 (11054번) (0) | 2024.01.27 |
[백준] JAVA 자바 : 가장 긴 감소하는 부분 수열 (11722번) (0) | 2024.01.27 |