-
BOJ) 회의실배정알고리즘/백준 2020. 7. 11. 20:43반응형
회의실배정
풀이
포스팅하기에는 조금 민망한 코드지만, 정답률이 높지 않아서 포스팅하게 됐다.
회의가 시작시간과 끝나는 시간이 담겨있는 여러 회의에 대해 요청받는다.
이 때, 고르게 분포해서 최대한 많은 팀이 회의를 할 수 있게 만들어야한다.
그래서 처음에는 회의 시간이 가장 짧은 순으로 정렬을 했었다.
하지만, 반례가 존재했고 다시 고민했다.
회의가 끝나는 시간을 기준으로 시작시간이 가장 빠른 순서로 정렬하기로 했다.
회의가 끝나는 시간이 빠른 회의들 중 가장 회의 시간이 짧은 회의들을 채택하는 방법이다.
이후, 정렬된 배열을 돌면서 앞선 회의의 끝나는 시간과 같거나 이후인 회의들의 갯수를 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); } }
반응형'알고리즘 > 백준' 카테고리의 다른 글
BOJ) 다리 놓기 (0) 2020.07.16 BOJ) 체스판 위의 공 (2) 2020.07.11 BOJ) 로프 (0) 2020.07.11 BOJ) 30 (자바, JAVA) (0) 2020.07.11 BOJ) 리모컨 (0) 2020.07.11