https://programmers.co.kr/learn/courses/30/lessons/76501?language=kotlin
코딩테스트 연습 - 음양 더하기
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 re
programmers.co.kr
이 문제의 다른 정답자 해답을 보며 알게 된 foldIndexed
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/reduce-indexed.html
reduceIndexed - Kotlin Programming Language
kotlinlang.org
우선 fold와 reduce먼저 얘기하자면
val sum = numbers.reduce { sum, element -> sum + element }
val sumDoubled = numbers.fold(0) { sum, element -> sum + element * 2 }
컬렉션의 요소를 연속적으로 계산한 값을 반환하는데
차이점으로는 reduce는 초기값 없이 앞에 2개 값으로 연산을, fold는 초기값을 줄 수 있다.
여기에 인덱스 변수까지 주어지며 활용할 수 있는 function이 foldIndexed
사용 방법

위와 같이 파라미터 3개를 활용할 수 있다.
컬렉션의 index, 연산값을 저장할 변수, 해당 index의 반환 값
사용 방안
음양 더하기와 같이 다수의 배열이 같은 길이로 존재하며, 순서대로 정렬되어있는 문제를 풀이할 때 사용할 수 있다.
사용 예제
[일반 풀이]
class Solution {
fun solution(absolutes: IntArray, signs: BooleanArray): Int {
var answer: Int = 0
for(i in 0..absolutes.lastIndex){
if(signs[i]){
answer += absolutes[i];
}else{
answer -= absolutes[i];
}
}
return answer
}
}
[foldIndexed 사용 풀이]
class Solution {
fun solution(absolutes: IntArray, signs: BooleanArray) =
absolutes.foldIndexed(0){index, acc, i -> acc + if(signs[index]) i else -i }
}
확실히 코드가 간단해지긴 했다.
하지만 내부적으로 for문을 돌리는 건 매한가지라 성능적으론 차이가 없어 보인다.
'PROGRAMMING > KOTLIN' 카테고리의 다른 글
| [KOTLIN] 백준 10844번 쉬운 계단 수 (0) | 2021.07.01 |
|---|---|
| [KOTLIN] 다양한 for문 활용법 (0) | 2021.06.30 |
| [KOTLIN] 간단하게 계산기능 구현해보기 (0) | 2021.06.29 |