알고리즘/백준
BOJ) 회의실배정
Zin0_0
2020. 7. 11. 20:43
반응형
회의실배정
1931번: 회의실배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
풀이
포스팅하기에는 조금 민망한 코드지만, 정답률이 높지 않아서 포스팅하게 됐다.
회의가 시작시간과 끝나는 시간이 담겨있는 여러 회의에 대해 요청받는다.
이 때, 고르게 분포해서 최대한 많은 팀이 회의를 할 수 있게 만들어야한다.
그래서 처음에는 회의 시간이 가장 짧은 순으로 정렬을 했었다.
하지만, 반례가 존재했고 다시 고민했다.
회의가 끝나는 시간을 기준으로 시작시간이 가장 빠른 순서로 정렬하기로 했다.
회의가 끝나는 시간이 빠른 회의들 중 가장 회의 시간이 짧은 회의들을 채택하는 방법이다.
이후, 정렬된 배열을 돌면서 앞선 회의의 끝나는 시간과 같거나 이후인 회의들의 갯수를 count하며 답을 구했다.
코드는 짧지만, 람다식을 이용하지 않았다면 3~4줄은 더 늘었을 것이다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private static class Meeting {
int start, end;
public Meeting(int start, int end) {
this.start = start;
this.end = end;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Meeting[] applies = new Meeting[n];
for(int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
applies[i] = new Meeting(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
}
br.close();
solution(n,applies);
}
private static void solution(int n, Meeting[] applies) {
int prev =-1;
int cnt =0;
Arrays.sort(applies,(Meeting m1, Meeting m2) -> m1.end == m2.end ? Integer.compare(m1.start,m2.start) : Integer.compare(m1.end, m2.end));
for(Meeting meeting : applies) {
if(prev <= meeting.start) {
prev = meeting.end;
cnt++;
}
}
System.out.println(cnt);
}
}
반응형