문제 & 제한사항
길이가 같은 두 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 이하입니다.
입출력 예
a | b | result |
---|---|---|
[1,2,3,4] | [-3,-1,0,2] | 3 |
[-1,0,1] | [1,0,-1] | -2 |
풀이 방법
- 두 개의 배열의 길이가 같기 때문에 한 배열의 길이만 알아도 된다고 해서 변수를 만들었다.
- for문을 통해 answer에 a[i] * b[i] 값을 추가하도록 한다.
- 반환하는 것에 따로 조건이 없기 때문에 answer을 반환하도록 작성했다.
코드
function solution(a, b) {
const n = a.length;
var answer = 0;
for (i = 0; i < n; i++) {
answer += a[i] * b[i];
}
return answer;
}
console.log(solution([1,2,3,4], [-3,-1,0,2])); // 3
console.log(solution([-1,0,1], [1,0,-1])); // -2
다른 사람 풀이 & 느낀 점
function solution(a, b) {
return a.reduce((acc, _, i) => (acc += a[i] * b[i]), 0);
}
reduce
로 배열을 순회하며, 누적된 하나의 결과 값으로 return
하는 방법이다.
reduce
라는 함수에 대해서 들어보기만 했지 정확하게 이해를 하고 있는 상태가 아니라서 정리해보려고 한다.
reduce 정리
array.reduce(callback[, initialValue])
callback
함수는 배열의 각 요소에 대해 실행하며, 다음의 매개변수를 가진다.
accumulator
: 콜백 함수의 반환 값, 이전 순회에서의 최종 결과 값을 의미 / 초기 값이 제공된 경우 첫 번째 순회에서는 초기값으로 결정
currentValue
: 현재 순회 중인 배열 요소
currentIndex
(옵션) : 현재 순회 중인 배열의 요소 인덱스
array
(옵션) : reduce 함수가 호출된 배열
그 다음 initialValue
(옵션)은 콜백 함수의 첫 번째 순회에서 accumulator
로 사용될 초기 값을 의미한다.
만약 reduce()
함수 호출에서 initialValue
를 제공한 경우, accumulator
는 initialValue
와 같고, currentValue
는 배열의 첫 번째 값과 같다.
initialValue
가 없는 경우에는 accumulator
는 배열의 첫 번째 값과 같고, currentValue
는 두 번째 값과 같다.
작성 예시
const arr = [1, 2, 3, 4, 5]
const sum = arr.reduce((acc, cur, idx) => {
console.log(acc, cur, idx);
return acc + cur;
}, 0);
// arr cur idx
// 0 1 0
// 1 2 1
// 3 3 2
// 6 4 3
// 10 5 4
console.log(sum) // 15
위의 작성 예시를 바탕으로 맨 위에 풀었던 문제를 다시 풀어본다면 다음과 같이 풀 수 있다.
function solution(a, b) {
var answer = a.reduce((acc, cur, idx) => acc += cur*b[idx], 0);
return answer;
}
console.log(solution([-1,0,1], [1,0,-1]));
// 0 -1 1
// -1 0 0
// -1 1 -1
// -2
a라는 배열을 순회 하면서 acc
에 현재 값인 cur(===a[idx])
과 b[idx]
를 곱한 것을 합할 수 있는 공식이 만들어졌다.
다음에도 위와 같은 함수를 적용해 볼 수 있도록 도전해보려고 한다.
- 문제 링크
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 참고 자료
[JavaScript] reduce(리듀스) 함수 알아보기
✔ reduce 함수란? reduce는 사전적으로 줄이다라는 뜻을 가지고 있다. 사전적 의미 그대로, 리듀스 함수는 배열의 요소를 순차적으로 순회하며 숫자든 배열이든 객체든 하나의 값으로 줄여 return 하
5kdk.tistory.com
[JavaScript] 자바스크립트 reduce 함수 사용법과 예시
자바스크립트의 reduce 함수는 배열의 요소를 하나로 줄이는(reduce) 작업을 수행하는 함수이다. reduce 함수로 배열의 각 요소를 순회하면서 누적된 값을 계산하고 최종 결과를 반환할 수 있다. 기본
jerryjerryjerry.tistory.com