Lv. 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의 길이)
제한사항
- a, b의 길이는 1 이상 1,000 이하입니다.
- a, b의 모든 수는 -1,000 이상 1,000 이하입니다.
입출력 예
numbers | result | |
---|---|---|
[1,2,3,4] | [-3,-1,0,2] | 3 |
[-1,0,1] | [1,0,-1] | -2 |
입출력 예 설명
3-1) 입출력 예 #1
- a와 b의 내적은
1*(-3) + 2*(-1) + 3*0 + 4*2 = 3
입니다.
3-2) 입출력 예 #2
- a와 b의 내적은
(-1)*1 + 0*0 + 1*(-1) = -2
입니다.
문제 풀이
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])
함수 선언
- 화살표 함수를 사용하여
a
,b
를 매개변수로 받는다.
풀이
- 변수
arr
을 배열로 선언한다. -
for
문을 사용하여arr
에a
,b
를 곱해준 값을 할당한다. -
arr
에 할당된 배열들을 모두 더해주기 위해reduce
메서드를 사용했다.
결과 반환
-
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를 리턴함
실행
-
solution([1,2,3,4],[-3,-1,0,2])
실행하면 3 출력 -
solution([-1,0,1],[1,0,-1])
실행하면 -2 출력
다른 사람의 풀이 참고
문제에 대해 설명을 이해하는 시간이 점점 길어지는 것 같다. 수학적인 부분이 많이 들어가다보니 어렸을 때 수학을 열심히 안한 나를 되돌아보며, 고수들의 문제 풀이를 참고해봤다. 역시나 한 줄 코드가 많았는데, 같은 reduce
메서드를 사용하고 이렇게 축약할 수 있다니..! 항상 reduce(누적값,현재값)
으로 생각해서 작성하다보니 reduce(누적값,현재값,현재인덱스,원본배열)
의 현재인덱스를 기억못해서 그렇다.. 다음 같은 방식의 문제가 있을 경우 꼭 기억해보도록 하자!
// [29명] 총합 - reduce를 사용한 한 줄 풀이과정 (화살표 함수를 사용할 경우)
function solution(a, b) {
return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}
링크
- 문제 링크: 문제 링크
- Git: rarrit github
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges