2015년 8월 16일 일요일

LeetCode Meeting Rooms


https://leetcode.com/problems/meeting-rooms/

이 문제는 좀 재밌었다.
미팅의 시작 시간과 종료시간이 적혀있는 interval 클래스 배열들을 입력 받아서 모든 미팅에 정시간에 제대로 참석할 수 있는지를 판단하는 것이다.
그러기 위해서는 다음 미팅의 start 가 전 미팅의 end 후여야 한다. 즉, 시간이 겹쳐서는 안된다는 것이다.
어떻게 풀어야 할 지 고민했었는데, 내가 생각했던 것은 모든 미팅 시간입력은 분(정수)로 입력이 되기 때문에, HashSet<Integer>를 이용하려고 했었다. start~end 매분을 HashSet 에 싹 다 입력을 하는 것이다. 그럼 다음 interval 의 입력이 있을 때, 혹시 시간이 겹치게 되면 HashSet 에서 false를 return 하는 것을 잡으려고 했는데, 이것은 O(n^2) 시간이 걸리게 된다. interval 배열과 end - start 입력.

푸는 방법으로는 sort를 이용하는 것이 있었다. Comparator 라는게 있어서 좀 재밌는 거 같다. PriorityQueue도 Comparator 를 이용해서 재배치가 가능하고, Arrays.sort 에도 Comparator를 붙일 수 있어서 자기의 기준에 맞춰서 배열을 정렬할 수 있게 되었다.
앞-- Object1, Object 2 ...... --뒤  return이 양수이면 순서를 바꾸고, 음수이면 그대로 둔다.
랜덤하게 입력받는 시간들을 start 시간으로 정렬해서 차례대로 입력을 받도록 한다. end 시간과 다음 미팅의 start 시간을 비교해서 판단을 하게 했다.

댓글 없음:

댓글 쓰기