Menu
Coddy logo textTech

이벤트 일정 관리

Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 56번째.

challenge icon

챌린지

어려움

이벤트 스케줄러를 구현하세요.

  • 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 플레이그라운드