Menu
Coddy logo textTech

범위 메서드

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)도 이를 지원하며, 빠른 합계와 곱셈을 위해 자주 사용하게 될 것입니다.

challenge icon

챌린지

쉬움

두 개의 정수(두 줄) ntarget을 읽으세요. 닫힌 범위 1...n을 데이터 세트로 취급하세요.

세 줄을 출력하세요:

  1. target이 범위 내에 있으면 true, 그렇지 않으면 false
  2. 범위 내 모든 값의 곱(n!: 팩토리얼). reduce를 사용하세요.
  3. 범위 내의 값 중 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의 배수
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨