내용 복습/알고리즘

프로그래머스 1단계 내적 - arr.reduce

jskim4695 2024. 1. 31. 14:55
function solution(a, b) {
    var answer = 0;
    for(let i=0; i<a.length; i++) {
        answer += a[i]*b[i]
    }
    return answer;
}

당초 내가 for문을 이용해 푼 방식인데 풀어내긴 했지만 비효율적이라는 생각이 들어 다른 사람이 쓴 코드를 보니

 

 

function solution(a, b) {
    return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}

 

reduce( accumulator, currentValue, currentIndex ) 이 순인데 (이전 호출의 결과값, 현제 요소의 값, 배열의 인덱스위치) 순이다. _는 사용하지 않는 인자일 경우 다음인자를 사용하기 위해 넣어준 것이고, 이전 호출의 결과값인 acc에 계속 값을 더해가는 방식으로 누적해가는 것이다.

 

 

reduce() : 해당 배열의 모든 요소를 하나의 값으로 줄이기 위해 두 개의 인수를 전달받는 콜백함수를 실행한다.

 

이때 명시된 콜백함수에 배열의 첫 번째 요소와 두 번째 요소를 인수로 전달하고 실행한다.

그 결과 반환한 결괏값과 세 번쨰 요소를 다시 인수로 전달하고 실행한다.

이러한 동작을 반복하여 모든 배열요소를 인수로 전달하고 마지막으로 반환한 결괏값을 반환한다.

var arr = [1, 2, 3, 4, 5];

function sumOfValues(x, y) {
    return x - y;
}

arr.reduce(sumOfValues); // 1 - 2 - 3 - 4 - 5 = -13

 

 

출처

https://velog.io/@teo_ryu/javascript-reduce-%ED%95%A8%EC%88%98%EC%99%80-%EC%8B%B8%EC%9A%B0%EA%B8%B0