Menu
Coddy logo textTech

복습 - 도형 계산기

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

challenge icon

챌린지

어려움

다형성과 제네릭을 결합한 도형 계산기를 만드세요. 프로토콜 Shape은 name, area() 및 perimeter()(둘 다 Double)를 요구합니다. Rect, Circle(π는 3.14) 및 Triangle(세 변, Foundation의 sqrt를 사용한 헤론의 공식으로 넓이 계산)을 구현하세요. 제네릭 함수 largest<T>(_ items: [T], by key: (T) -> Double) -> T?를 작성하세요. 도형마다 소수점 이하 두 자리로 한 줄씩 반환하는 report(_:)를 완성한 다음(rect: area 12.00, perimeter 14.00), largest를 사용하여 찾은 largest area: circle과 largest perimeter: rect를 출력하세요.

제공된 코드는 rect,3,4, circle,2 또는 tri,3,4,5 형식의 줄을 읽고, [any Shape]를 구성한 후 반환된 각 줄을 출력합니다.

코드는 Shape.swift, Rect.swift, Circle.swift, Triangle.swift 및 Functions.swift에 작성하세요. main.swift에는 제공된 입력/출력 코드가 들어 있으며 수정할 수 없습니다.

직접 해보기

import Foundation

// 제공된 입력/출력 코드: 있는 그대로 유지하세요
var input: [String] = []
while let line = readLine() { input.append(line) }
var shapes: [any Shape] = []
for line in input {
    let p = line.split(separator: ",").map(String.init)
    let v = p.dropFirst().map { Double($0)! }
    switch p[0] {
    case "rect": shapes.append(Rect(w: v[0], h: v[1]))
    case "circle": shapes.append(Circle(r: v[0]))
    default: shapes.append(Triangle(a: v[0], b: v[1], c: v[2]))
    }
}
for line in report(shapes) { print(line) }

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

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