문제
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어지는데,
a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
제출코드
function solution(a, b) {
let result = 0
for(let i = 0; i < a.length; i++) {
result = result + a[i]*b[i]
}
return result
}
접근과정
- 처음엔 forEach, map, reduce 같은 것들을 이용해보려고 했으나 하나의 배열에 메서드를 써주는 방식으로 어떻게 각 배열안의 요소를 곱해줄 수 있을지 시간이 필요하다고 생각되어 일단 for문으로 구현
다른 풀이 1.
function solution(a, b) {
return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}
- 역시 reduce를 사용하여 풀어냈다
- reduce의 4개의 매개변수에 대해 잘 이해하고 있어야겠다.
- a배열을 기준으로 reduce 메서드를 적용해주면서 콜백함수에서 적용할 연산을 작성할 때 b배열에 대한 값을 가져와서 작성해주면 되는구나
- 2번째 매개변수를 언더바로 작성한 것은 중요한 매개변수라 아니라 저렇게 작성하는 것이라하고 실제 연산부에서도 사용되지 않았다는 걸 알수 있다.
다른 풀이 2.
function solution(a, b) {
let answer = a.reduce((acc, cur, idx) => acc += cur*b[idx], 0)
return answer;
}
- 이 방식도 같은 로직인데 a배열의 요소들을 처리할 현재요소인 2번째 매개변수를 이용해서 표현했고, 위에서는 처리할 요소인 2번째 매개변수를 언더바로 놓고 연산 부분에서 직접 표현해주었다.
참고자료