이벤트 일정 관리
Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 56번째.
챌린지
어려움이벤트 스케줄러를 구현하세요.
Event(title, day, start, end)(0부터 24까지의 시간)는Comparable<Event>을 구현하는 클래스로, day, 그다음 start, 그다음 title 순서로 정렬됩니다. title과 day가 일치하면(같은 이벤트가 두 번 입력된 경우) 두 이벤트는 동일하므로, 이 두 속성을 기준으로equals와hashCode를 재정의하세요. 출력 형식은 두 자리 시간으로day 3 09-11 standup과 같습니다. 같은 날에 각 이벤트의 시작 시간이 상대 이벤트의 종료 시간보다 빠르면overlaps(other)는 참입니다.Scheduler.add(event)는 이벤트가 시작 시간 이후에 종료되지 않으면invalid: standup, 동일한 이벤트이면duplicate, 일정 순서에서 처음으로 겹치는 이벤트가 있으면conflicts with review, 그 외에는added를 반환합니다.agenda()는 정렬된 이벤트를 반환하고,busiestDay()는 예약된 시간이 가장 많은 날에 대해busiest day 3: 5h를 반환합니다(동률이면 더 이른 날). 이벤트가 없으면no events를 반환합니다.
제공된 코드는 title,day,start,end 형식의 줄로 이벤트를 읽고, 각 이벤트에 대한 응답을 출력한 다음 일정(줄마다 이벤트 하나)과 가장 바쁜 날을 출력합니다.
코드는 Event.kt와 Scheduler.kt에 작성하세요. Main.kt에는 제공된 입력/출력 코드가 들어 있으며 수정할 수 없습니다.
직접 해보기
fun main() {
// 제공된 입력/출력 코드: 그대로 유지하세요
val input = generateSequence(::readLine).toList()
val scheduler = Scheduler()
for (line in input) {
val p = line.split(",")
println(scheduler.add(Event(p[0], p[1].toInt(), p[2].toInt(), p[3].toInt())))
}
for (e in scheduler.agenda()) println(e)
println(scheduler.busiestDay())
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Kotlin 플레이그라운드