길이가 같은 두 1차원 정수 배열 a,b가 매개변수로 주어진다. 내적을 구하면 되는데
내적은 각 배열을 돌면서 배열의 인덱스 값을 곱한것을 더한 값이다.
a[0]b[0]+a[n-1]b[n-1]
누적값을 구하는것이기 때문에 reduce함수를 적용해보려고 하였다.
function solution(a, b) {
let answer = 0;
answer = a.reduce((acc,cur,i)=>{
if(!a[i+1]){
return acc
}
return acc + (a[i+1]*b[i+1])
},a[0]*b[0])
return answer;
}
다른사람들의 풀이를 봤을때 reduce를 그냥 머리로는 이해했는데
직접 사용해보려고 하니 잘모르겠어서 mdn을 쭉 훑어보면서 풀었다.
인덱스 값과 초기값을 두었고 순회를 한번 더 돌아서 undefind 값이 떠서
값이 제대로 안나오자 a[i+1] 값이 undefind 이면 리턴 하도록 하였다.
제출 해보니 결과는 시간도 준수했고 올클리어 할수 있었다.
좀더 코드를 줄일수 있을것 같기도 한데 생각좀 해봐야 할것 같다.
function solution(a, b) {
return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}
초기값을 0으로 두고 간단하게 풀었다,
a.reduce를 써서 a.값을 인자로 계속 전달해주는줄 알았던 내 실수였다.
그냥 acc 값에 내가 정해준 a[i]*b[i] 값을 계속 곱해주는데
처음봤을때는 내 코드랑 뭐가 다른지 찾기 어려웠는데 좀더 생각해보니
이해할수 있었다.
매개변수로 cur을 주길래 꼭 사용해야 하나 싶었는데 아니었다.
고정관념에 너무 사로잡혀 있는것 같다.
acc += cur*b[idx]
이렇게 사용해도 될것 같다.
Acc 는 누적값,
cur는 a에서 배열을 순회하는 값