[프로그래머스] 음양 더하기

neoneoneo·2024년 2월 27일
0

kotlin

목록 보기
8/49

문제

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

나의 풀이

class Solution {
    fun solution(absolutes: IntArray, signs: BooleanArray): Int {
        var answer: Int = 0      
        for (i in 0..absolutes.size-1) {
            if(signs[i]) {
                answer += absolutes[i]
            } else {
                answer -= absolutes[i]
            }
        }           
        return answer
    }
}

고수의 풀이

class Solution {
    fun solution(absolutes: IntArray, signs: BooleanArray) =
        absolutes.foldIndexed(0) { idx, acc, num -> acc + if (signs[idx]) num else -num }
}

배운점

  • foldIndexed는 처음 봤다.
    • foldIndexed : 초기값(0)은 합계를 누적할 변수로 사용된다.
    • absolutes 배열의 각 요소에 대해 람다 함수를 호출하며, 현재의 인덱스(idx), 현재의 누적 값(acc), 현재 숫자(num)을 인자로 전달한다.
    • 람다 함수에서는 acc + if (signs[idx]) num else -num 식을 사용하여 현재 숫자에 대응하는 signe 배열의 부호를 확인하여 누적 값을 갱신한다.
    • 결과적으로 foldIndexed 함수가 모든 요소에 대한 누적 값이 계산된 값을 반환한다.
    • 여기서 핵심은 acc + if (signs[idx]) num else -num인 것 같다.
      • acc에 누적 값을 더할 건데,
      • 조건으로 signs의 inx에 해당하는 값이 참/거짓이면 absolutes에서 끌어오는 현재 숫자인 num에 +- 음양 처리를 해준다는 것

[TIL-240227]

0개의 댓글