:ledger: 문제 설명

길이가 같은 두 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의 길이)

:one: 제한사항

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

:two: 입출력 예

numbers result  
[1,2,3,4] [-3,-1,0,2] 3
[-1,0,1] [1,0,-1] -2

:three: 입출력 예 설명

:pushpin: 3-1) 입출력 예 #1

  • a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다.

:pushpin: 3-2) 입출력 예 #2

  • a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1) = -2 입니다.

:ledger: 문제 풀이

const solution = (a,b) => {
    let arr = [];
    for(let i = 0; i < a.length; i++){
        arr.push(a[i] * (b[i]));
    }
    return arr.reduce((a,b) => a + b);
}
solution([1,2,3,4],[-3,-1,0,2])

:one: 함수 선언

  • 화살표 함수를 사용하여 a, b를 매개변수로 받는다.

:two: 풀이

  • 변수 arr을 배열로 선언한다.
  • for문을 사용하여 arra, b를 곱해준 값을 할당한다.
  • arr에 할당된 배열들을 모두 더해주기 위해 reduce메서드를 사용했다.

:three: 결과 반환

  • a = [1,2,3,4], b = [-3,-1,0,2] 대입하면 1(-3) + 2(-1) + 30 + 42 = 3을 리턴함
  • a = [-1,0,1], b = [1,0,-1] 대입하면 (-1)1 + 00 + 1*(-1) = -2를 리턴함

:four: 실행

  • solution([1,2,3,4],[-3,-1,0,2]) 실행하면 3 출력
  • solution([-1,0,1],[1,0,-1]) 실행하면 -2 출력

:fire: 다른 사람의 풀이 참고

문제에 대해 설명을 이해하는 시간이 점점 길어지는 것 같다. 수학적인 부분이 많이 들어가다보니 어렸을 때 수학을 열심히 안한 나를 되돌아보며, 고수들의 문제 풀이를 참고해봤다. 역시나 한 줄 코드가 많았는데, 같은 reduce메서드를 사용하고 이렇게 축약할 수 있다니..! 항상 reduce(누적값,현재값)으로 생각해서 작성하다보니 reduce(누적값,현재값,현재인덱스,원본배열)의 현재인덱스를 기억못해서 그렇다.. 다음 같은 방식의 문제가 있을 경우 꼭 기억해보도록 하자!

// [29명] 총합 - reduce를 사용한 한 줄 풀이과정 (화살표 함수를 사용할 경우)
function solution(a, b) {
    return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges