Menu
Coddy logo textTech

Reduce

Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 25번째.

reduce는 전체 배열을 단일 값으로 축소합니다. 합계, 곱셈, 최댓값/최솟값 찾기 또는 여러 요소로부터 새로운 문자열이나 배열을 생성할 때 사용합니다.

let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total)                       // 10

첫 번째 인수는 초기 누산기(initial accumulator)입니다. 클로저는 현재 실행 중인 누산기와 다음 요소를 받아서 새로운 누산기를 반환합니다. 누산기의 최종 값이 결과가 됩니다.

산술 연산자의 경우, Swift는 기호 기반의 단축 표현을 제공합니다:

[1, 2, 3, 4].reduce(0, +)              // 10
[1, 2, 3, 4].reduce(1, *)              // 24

reduce가 반드시 숫자를 반환해야 하는 것은 아닙니다. 누산기(accumulator)는 어떤 타입이든 될 수 있으며, 여러분이 직접 결정할 수 있습니다:

let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence)                    // "hi!there!"
challenge icon

챌린지

쉬움

한 줄의 입력을 읽으십시오: 쉼표로 구분된 정수 목록입니다. 각각에 대해 reduce를 사용하여 세 줄을 출력하십시오:

  1. 합계
  2. 최댓값 (두 인자 중 더 큰 값을 반환하는 클로저를 사용하고, .max()를 호출하지 마십시오)

최소한 하나의 요소가 있다고 가정합니다. 최댓값의 경우, nums[0]를 초기 누적값으로 사용하고 배열의 나머지 부분을 reduce할 수 있습니다.

입력 3,7,2,8,4에 대한 출력은 다음과 같습니다:

24
1344
8

치트 시트

reduce는 초기 누적값(accumulator)과 클로저를 사용하여 배열을 단일 값으로 축소합니다:

let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n } // 10

산술 연산자에 대한 단축 표현:

[1, 2, 3, 4].reduce(0, +)  // 10
[1, 2, 3, 4].reduce(1, *)  // 24

누적값은 어떤 타입이든 될 수 있습니다:

["hi", "there"].reduce("") { $0 + $1 + "!" } // "hi!there!"

reduce를 사용하여 최댓값을 찾으려면, 첫 번째 요소를 초기값으로 사용하세요:

let maxVal = nums.dropFirst().reduce(nums[0]) { $0 > $1 ? $0 : $1 }

직접 해보기

let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: reduce를 사용하여 합계, 곱, 최댓값 구하기
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨