개발 공부/알고리즘

[프로그래머스 알고리즘] "내적" JavaScript / reduce 메쏘드

U_D 2022. 3. 13. 23:34

1. 문제 설명

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

 

 

2. 제한 조건

a, b의 길이는 1 이상 1,000 이하입니다.

a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

 

 

 

3. 예시

입력/출력

 

 

4. 풀이

[for문]

function solution(a, b) {
    var answer = 0;
    for (let i = 0; i < a.length; i++)
        answer += a[i] * b[i]
        return answer;
}

 

[reduce 활용]

// 문제에서 출제된 answer의 1234567890의 값을 유지한 채 푸는 방법으로 reduce를 사용

function solution(a, b) {
    var answer = 1234567890;
    return answer =  a.reduce((x, y, i) =>  x + (y*b[i]), 0);
}

// a가 [1,2,3,4] b가 [-3.-1.0,2] 일때 아래처럼 진행 된다.
// 0 + (1*-3) = -3
// -3 + 2*-1 = -5
// -5 + 3*0 = -5
// -5 + 4*2 = 3

 

.reduce  ()  

reduce 메서드는 map, forEach와 비슷하게 배열의 요소들을 순회하면서 반복적인 연산을 하는 메서드이지만, map과 forEach와는 조금 다른 부분들이 있다.

기본 사용법은 인지하였으나 복잡해질수록 아직 이해도가 부족하여 좀 더 공부가 필요하다.

 

[기본 문법]

// reduce
const numbers = [1, 2, 3, 4];

numbers.reduce((누산값, 현재요소값, 현재요소의index, 현재배열) => {
  return 다음누산값;
}, 초기누산값);

출처 : https://bigtop.tistory.com/69