Leetcode Java My Calendar I
업데이트:
문제
코드
class MyCalendar {
private TreeMap<Integer, Integer> bookings;
public MyCalendar() {
this.bookings = new TreeMap<>();
}
public boolean book(int start, int end) {
Map.Entry<Integer, Integer> booking = this.bookings.floorEntry(--end);
if (booking == null || booking.getValue() < start) {
this.bookings.put(start, end);
return true;
} else {
return false;
}
}
}
/**
* Your MyCalendar object will be instantiated and called as such:
* MyCalendar obj = new MyCalendar();
* boolean param_1 = obj.book(start,end);
*/
결과
설명
- 날자가 겹치지 않게 관리하는 일정 관리 시스템인 MyCalendar 클래스를 완성하는 문제이다.
- 일정은 [start, end) 형태로 주입되며, 반 열림 구간인 start <= x < end 를 만족한다.
- 생성자인 MyCalendar()는 일정 관리 객체를 초기화한다.
- 메서드인 book(int start, int end)은 [start, end) 구간의 일정 추가가 가능하면 일정 관리 시스템에 추가 후 true를 반환하고, 겹치는 일정이 존재하면 일정을 추가하지 않고 end를 반환한다.
-
bookings는 일정을 저장하고 관리할 객체로 구간 관리를 하기 위해 TreeMap으로 정의한다.
- 생성자인 MyCalendar()를 완성한다.
- 일정 관리를 하기 위한 bookings를 TreeMap으로 초기화한다.
- 메서드인 book(int start, int end)을 완성한다.
- 일정은 반열림 구간이므로 end를 1 감소시키고 bookings에서 해당 값보다 같거나 작은 값 중 가장 큰 값이 키인 Entry 객체를 booking에 넣어준다.
- booking이 null이거나 booking의 값이 start보다 작은 경우 예약 가능한 일정이므로, bookings에 키가 start에 값은 end로 추가하고 true를 반환한다.
- 위의 경우가 아니라면 예약 불가능하므로 false를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기