Menu
Coddy logo textTech

주차장

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

challenge icon

챌린지

어려움

주차장을 만드세요.

  • 열거형 Size에는 순서대로 SMALL, MEDIUM, LARGE가 있으며, 각각 소문자 label을 가집니다.
  • Vehicle(plate)는 추상 속성 size와 hourlyRate를 가진 봉인 클래스입니다. Motorbike는 소형(시간당 1), Car는 중형(3), Van은 대형(5)입니다.
  • Garage(small, medium, large)는 크기별 주차 공간 수로 생성됩니다. park(vehicle)는 차량을 해당 크기의 빈 공간에 주차하거나, 빈 공간이 없으면 빈 공간이 있는 다음으로 큰 크기의 공간에 주차하고 parked AB12 in medium, full for AB12 또는 AB12 is already parked를 반환합니다. leave(plate, hours)는 공간을 비우고 AB12 paid 9(요금에 시간을 곱한 값, 최소 1시간) 또는 no vehicle AB12를 반환합니다. status()는 free: small 1, medium 0, large 2를 반환합니다.

제공된 코드는 주차 공간을 small,medium,large 형식으로 읽은 다음, park car AB12(bike, car 또는 van), leave AB12 3 또는 status 명령을 읽고 각 응답을 출력합니다.

작성한 코드는 Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt 및 Garage.kt에 작성합니다. Main.kt에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.

직접 해보기

fun main() {
    // 제공된 입력/출력 코드: 그대로 유지하세요
    val input = generateSequence(::readLine).toList()
    val (small, medium, large) = input[0].split(",").map { it.toInt() }
    val garage = Garage(small, medium, large)
    for (cmd in input.drop(1)) {
        val p = cmd.split(" ")
        when (p[0]) {
            "park" -> {
                val vehicle = when (p[1]) {
                    "bike" -> Motorbike(p[2])
                    "van" -> Van(p[2])
                    else -> Car(p[2])
                }
                println(garage.park(vehicle))
            }
            "leave" -> println(garage.leave(p[1], p[2].toInt()))
            else -> println(garage.status())
        }
    }
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: Kotlin 플레이그라운드