fold 메서드를 알게 된 후로 자주 애용하게 된 것 같다.
아래 코드를 보자.
없는 숫자 더하기
class Solution {
fun solution(numbers: IntArray): Int = (0..9).fold(0) { acc, num ->
acc + if(!numbers.contains(num)) num else 0
}
}
0.. 9에서 숫자를 fold로 뿌려주고,
파라미터로 전달받은 numbers IntArray에 포함되어 있지 않으면,
acc에 더해주는 메서드이다.
근데 이것보다 훨씬 간결한 코드를 보았다.
//없는 숫자 더하기
class AddMissingNumbers {
fun solution(numbers: IntArray): Int = 45 - numbers.sum()
}
와우..
모든 0에서 9까지 합이 45니까
거기서 전달받은 numbers에 합을 빼버리는 솔루션이다..
이렇게 간단하게 표현하다니.. 대단하다..
다음 문제를 보자..
내적
//내적
class DotProduct {
fun solution(a: IntArray, b: IntArray): Int =
a.foldIndexed(0) { idx, acc, num ->
acc + num * b[idx]
}
}
해당 문제 역시 fold를 사용했다.
배열에 각각 같은 인덱스를 가진 요소끼리 곱하는 문제를
foldIndexed를 응용하여 풀었다.