범위 메서드
Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 9번째.
Range는 실제 Collection이므로, 배열에서 사용하는 것과 동일한 도구들을 제공합니다.
contains, count, first, 그리고 last는 모두 직접 작동합니다:
let r = 1...10
print(r.contains(5)) // true
print(r.count) // 10
print(r.first!, r.last!) // 1 10사용해 본 대부분의 배열 메서드들도 작동합니다. filter는 범위를 필터링한 결과가 그 자체로 범위가 아니기 때문에 배열을 반환합니다:
let evens = (1...10).filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6, 8, 10]reduce도 마찬가지입니다. 범위(ranges)도 이를 지원하며, 빠른 합계와 곱셈을 위해 자주 사용하게 될 것입니다.
챌린지
쉬움두 개의 정수(두 줄) n과 target을 읽으세요. 닫힌 범위 1...n을 데이터 세트로 취급하세요.
세 줄을 출력하세요:
target이 범위 내에 있으면true, 그렇지 않으면false- 범위 내 모든 값의 곱(
n!: 팩토리얼).reduce를 사용하세요. - 범위 내의 값 중
3의 배수인 값들을,로 연결하여 출력하세요 (해당하는 값이 없으면 빈 줄 출력).filter를 사용하세요.
입력 5 / 3에 대한 출력은 다음과 같습니다:
true
120
3치트 시트
범위(Ranges)는 Collection을 준수하며 일반적인 컬렉션 메서드를 지원합니다:
let r = 1...10
r.contains(5) // true
r.count // 10
r.first! // 1
r.last! // 10범위에 대한 filter는 배열을 반환합니다:
let evens = (1...10).filter { $0 % 2 == 0 }
// [2, 4, 6, 8, 10]reduce는 범위에서 직접 작동합니다:
let product = (1...5).reduce(1) { $0 * $1 } // 120
let sum = (1...5).reduce(0, +) // 15직접 해보기
let n = Int(readLine()!)!
let target = Int(readLine()!)!
let r = 1...n
// TODO: contains(target), reduce를 통한 곱, filter를 통한 3의 배수
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.