주차장
Coddy Swift 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 55번째.
챌린지
어려움주차장을 구축하세요. Vehicle 프로토콜에는 plate, size(small = 1, medium = 2, large = 3을 포함하는 Size: Int, Comparable 열거형) 및 hourlyRate가 있습니다. Motorbike(소형, 시간당 1), Car(중형, 3) 및 Van(대형, 5)을 구현하세요. Garage 클래스는 크기별 주차 공간 수와 함께 생성됩니다. park(_:)는 차량을 해당 크기의 빈 공간에 주차하거나, 빈 공간이 없으면 다음으로 큰 크기의 공간에 주차하고 parked AB12 in medium 또는 full for AB12을 반환합니다. leave(plate:hours:)는 주차 공간을 비우고 AB12 paid 9(요금에 시간을 곱한 값이며, 최소 1시간) 또는 no vehicle AB12를 반환합니다. status()는 free: small 1, medium 0, large 2를 반환합니다.
제공된 코드는 주차 공간을 small,medium,large 순서로 읽은 다음, park car AB12, leave AB12 3 또는 status 명령을 읽고 각 결과를 출력합니다.
코드는 Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift 및 Garage.swift에 작성하세요. main.swift에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.
직접 해보기
// 제공된 입력/출력 코드: 그대로 유지하세요
var input: [String] = []
while let line = readLine() { input.append(line) }
let s = input[0].split(separator: ",").map { Int($0)! }
let garage = Garage(small: s[0], medium: s[1], large: s[2])
for cmd in input.dropFirst() {
let p = cmd.split(separator: " ").map(String.init)
switch p[0] {
case "park":
let v: any Vehicle
switch p[1] {
case "bike": v = Motorbike(plate: p[2])
case "van": v = Van(plate: p[2])
default: v = Car(plate: p[2])
}
print(garage.park(v))
case "leave": print(garage.leave(plate: p[1], hours: Int(p[2])!))
default: print(garage.status())
}
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Swift 플레이그라운드