알고리즘 코딩
배열 2개의 내적 구하는 알고리즘 feat. reduce(acc, _, i)
가문비7
2023. 4. 16. 10:47
내적이란 단어는 생소하지만 문제에 대한 자세한 설명은 아래 링크에 있다.
https://school.programmers.co.kr/learn/courses/30/lessons/70128
아래는 나의 답안이다.
function solution2(a, b) {
var answer = 0;
for(let i =0; i < a.length; i++) {
answer = answer + a[i]*b[i]
}
console.log(answer);
return answer;
}
a = [-1,0,1]
b = [1,0,-1]
solution2(a,b)
참 쉽다 쉬워~ 이러면서 풀었는데 reduce(acc, ___, i) 라는 메서드를 써서 만든 답안을 보고 깜짝 놀랐다. 답안은 아래와 같다. 내가 상세한 주석을 덧붙였다.
function solution(a, b) {
var answer = 0;
answer = a.reduce((acc, ___, i)=> acc + a[i]*b[i], 0)
// a.reduce 에서 a는 배열의 index를 i 파라미터로 받아 와야 하기 때문에 넣은 것이다.
// a의 요소는 3개이므로 0, 1, 2 라는 index가 있는데 그걸 순차적으로 i 에 넣어 콜백함수에서 사용한다.
// 따라서 a.reduce 는 b.reduce 로 바꿔도 동작한다. b도 3개의 요소를 갖고 있기 때문이다.
// ___ 는 쓰지 않는 파라미터이다. i 파라미터까지 써야 하기에 구분을 위해 어쩔수 없이 ___, 을 넣은 것이다.
console.log(answer)
return answer;
}
a = [-1, 0, 1]
b = [1, 0, -1]
solution(a,b)
세번째 파라미터인 i 는 mdn 예문에서도 안 쓰는 파라미터인데 여기에 등장했다. 참 모범 중의 모범답안이다. mdn 예문에는 없지만 설명에는 이 세번째 파라미터가 등장하니 아래 링크를 참고하면 되겠다. currentIndex 라는 이름으로 등장한다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
메서드는 참 멋지다. 최초 작성자께 박수를 보낸다.