Menu
Coddy logo textTech

Reduce / Inject

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

때때로 전체 배열을 단일 값, 합계, 곱, 또는 가장 긴 문자열로 축소해야 할 때가 있습니다. reduce(inject라고도 불림: 동일한 메서드, 두 개의 이름)가 바로 그 도구입니다.

이 블록은 누산기(accumulator)와 현재 요소(current element)라는 두 개의 매개변수를 받습니다. 블록의 반환 값은 다음 누산기가 됩니다.

total = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts total   # 10

단계별로 누산기는 0 → 1 → 3 → 6 → 10입니다.

첫 번째 인수는 누산기(accumulator)의 시작 값입니다. 이를 생략하면, Ruby는 배열의 첫 번째 요소를 사용합니다:

[1, 2, 3, 4].reduce { |acc, n| acc * n }   # 24

합계나 곱과 같은 순수 연산의 경우, Ruby는 블록 대신 심볼을 전달하는 단축 방법을 제공합니다:

[1, 2, 3, 4].reduce(:+)   # 10
[1, 2, 3, 4].reduce(:*)   # 24

커스텀 어큐뮬레이터를 구축할 수 있게 되면, 단 한 번의 순회로 거의 모든 것을 계산할 수 있습니다.

challenge icon

챌린지

쉬움

쉼표로 구분된 정수 목록을 읽습니다. 다음 세 줄을 출력하세요:

  1. 합계 (reduce(:+)를 사용하세요)
  2. 곱 (reduce(:*)를 사용하세요)
  3. reduce와 명시적 블록을 사용하여 계산된 최댓값 (max를 사용하지 않습니다).

입력이 2,5,3,8인 경우, 출력은 다음과 같습니다:

18
240
8

치트 시트

reduce (별칭: inject)는 배열을 단일 값으로 축소합니다. 블록은 누산기(accumulator)와 현재 요소를 전달받으며, 블록의 반환 값은 다음 누산기가 됩니다.

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

시작 값을 생략하면 첫 번째 요소를 초기 누산기로 사용합니다:

[1, 2, 3, 4].reduce { |acc, n| acc * n }  # 24

간단한 연산을 위한 단축형으로 심볼을 전달할 수 있습니다:

[1, 2, 3, 4].reduce(:+)  # 10
[1, 2, 3, 4].reduce(:*)  # 24

직접 해보기

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: 합계, 곱, 최댓값을 출력하세요 (reduce와 명시적 블록 사용)
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨