Kotlin 코딩테스트 문법 시리즈 ⑫ : 누적 함수 정리 (reduce, fold, scan)

2025. 7. 12. 04:08·Code Odyssey

✅ Kotlin에서는 reduce, fold, scan 등 누적 함수(Accumulation Functions)를 이용해 리스트 내의 값을 누적하거나 계산할 수 있습니다.


🔹 reduce — 왼쪽부터 누적

val list = listOf(1, 2, 3, 4)
val sum = list.reduce { acc, value -> acc + value }  // 10
  • 초기값 없이 첫 번째 요소를 초기값으로 사용
  • 두 번째 요소부터 누적
// 연산 순서: (((1 + 2) + 3) + 4)

⚠️ 주의

  • 빈 리스트에 reduce() 사용 시 예외 발생 → fold() 권장

🔹 fold — 초기값부터 누적

val list = listOf(1, 2, 3, 4)
val sum = list.fold(10) { acc, value -> acc + value }  // 20
  • 초기값을 지정하여 누적 시작
  • 연산 순서: (((10 + 1) + 2) + 3 + 4)

🔹 reduceRight / foldRight — 오른쪽부터 누적

val result = listOf("a", "b", "c").reduceRight { value, acc -> "$value-$acc" }
// 결과: "a-b-c"
  • 오른쪽에서 왼쪽으로 순서대로 누적
  • foldRight은 초기값 지정 가능

🔹 scan / scanRight — 중간 결과 포함 누적

val result = listOf(1, 2, 3).scan(0) { acc, value -> acc + value }
// 결과: [0, 1, 3, 6]  ← 중간 누적값 포함
  • fold와 거의 동일하되, 중간 단계 결과까지 리스트로 반환
val result = listOf("a", "b", "c").scanRight("z") { value, acc -> "$value$acc" }
// 결과: ["abcz", "bcz", "cz", "z"]

✅ 요약 정리

함수 초기값 방향 반환 타입 중간 결과 포함 비고
reduce ❌ 왼→오 T ❌ 빈 리스트 시 예외 발생
fold ✅ 왼→오 R ❌ 안전함 (초기값 필수)
reduceRight ❌ 오→왼 T ❌ 순서 주의
foldRight ✅ 오→왼 R ❌ 〃
scan ✅ 왼→오 List ✅ 중간 결과 반환
scanRight ✅ 오→왼 List ✅ 〃

✅ 고차 함수 vs 유틸 함수 vs 누적 함수 — 비교 요약

구분 고차 함수 유틸 함수 누적 함수
작동 대상 각 요소에 대해 독립적으로 작동 컬렉션 전체 구조 또는 다중 컬렉션 대상 컬렉션 전체에 대해 누적 계산 수행
주요 역할 필터링, 변환, 조건 검사 병합, 슬라이딩, 구간 분할, 평탄화 합산, 누적값 계산, 접기 등
대표 함수 map, filter, any, groupBy zip, chunked, windowed, flatMap reduce, fold, scan
리턴 값 (보통) 변형된 컬렉션 (보통) 변형된 컬렉션 단일 값 또는 누적 리스트 (scan)
예외 주의 거의 없음 거의 없음 reduce()는 빈 리스트 시 예외 발생
fold()는 초기값이 있어 안전

다음은 시리즈 ⑬: 기타 유용한 스코프 확장 함수 정리 (takeIf, also, apply, let 등) 으로 이어집니다.

'Code Odyssey' 카테고리의 다른 글

Kotlin 코딩테스트 문법 시리즈 ⑭ : 함수 패턴 정리  (3) 2025.07.14
Kotlin 코딩테스트 문법 시리즈 ⑬ : Scope Function 정리 (let, also, apply, run, takeIf)  (0) 2025.07.13
Kotlin 코딩테스트 문법 시리즈 ⑪ : 컬렉션 유틸 함수 정리 (zip, chunked, windowed 등)  (4) 2025.07.11
Kotlin 코딩테스트 문법 시리즈 ⑩ : 고차 함수 정리 (map, filter, any 등)  (1) 2025.07.10
Kotlin 코딩테스트 문법 시리즈 ⑨ : 정렬 (기본, 조건, 다중 기준)  (1) 2025.07.09
'Code Odyssey' 카테고리의 다른 글
  • Kotlin 코딩테스트 문법 시리즈 ⑭ : 함수 패턴 정리
  • Kotlin 코딩테스트 문법 시리즈 ⑬ : Scope Function 정리 (let, also, apply, run, takeIf)
  • Kotlin 코딩테스트 문법 시리즈 ⑪ : 컬렉션 유틸 함수 정리 (zip, chunked, windowed 등)
  • Kotlin 코딩테스트 문법 시리즈 ⑩ : 고차 함수 정리 (map, filter, any 등)
Celion
Celion
오늘도 평소처럼 화이팅!
  • Celion
    Orion Log
    Celion
  • 전체
    오늘
    어제
    • 전체 글 (144)
      • Uncompiled Thoughts (8)
        • 네이버 부스트캠프 10기 (5)
      • CS 기초부터 한 걸음씩 (34)
      • Code Odyssey (22)
      • Algorithm (77)
        • Coding Test Records (63)
      • Git (3)
      • reference (0)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 태그

    알고리즘고득점kit
    시뮬레이션
    Level2
    boostcamp
    백준
    Kotlin
    코테
    문법정리
    greedy
    java
    프로그래머스
    Level3
  • 최근 글

  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
Celion
Kotlin 코딩테스트 문법 시리즈 ⑫ : 누적 함수 정리 (reduce, fold, scan)
상단으로

티스토리툴바