길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다.
배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.)
예를 들어 A = [1, 4, 2] , B = [5, 4, 4] 라면
A에서 첫번째 숫자인 1, B에서 첫번째 숫자인 5를 뽑아 곱하여 더합니다. (누적된 값 : 0 + 5(1x5) = 5)
A에서 두번째 숫자인 4, B에서 세번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 5 + 16(4x4) = 21)
A에서 세번째 숫자인 2, B에서 두번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 21 + 8(2x4) = 29)
즉, 이 경우가 최소가 되므로 29를 return 합니다.
배열 A, B가 주어질 때 최종적으로 누적된 최솟값을 return 하는 solution 함수를 완성해 주세요.
문제를 풀기위해 아래와 같은 요소들을 고려하였다.
- 배열을 큰수에서 작은수, 작은수에서 큰수로 정렬해야한다.
- 두 배열을 곱하기 위해 반복문을 쓰거나 reduce를 사용해야한다.
function solution(A,B){
const Aarr = A.sort((a,b) => b-a);
const Barr = B.sort((a,b) => a-b);
var answer = 0;
for(let i = 0;i < A.length;i++) {
answer += Aarr[i] * Barr[i];
}
return answer;
}
배열값을 곱하고 합하는 연산은 반복문대신 reduce도 사용이 가능
• sort
- 구조 : arr.sort([compareFunction]);
배열을 정렬할 수 있다. 특정 조건을 기준으로 정렬하려면 compareFunction내부를 원하는 조건으로 채우면 된다. 비어있을 경우 배열 내의 요소들을 문자열로 변환하여 유니코드 값 순서대로 정렬한다.
ex) arr.sort((a,b) => b-a)
- 과정을 단순화해서 보면 배열에서 임의의 a(앞요소)와 b(뒷요소)요소를 가지고 특정 연산 수행 후 양수일경우 자리를 바꾸지 않고 음수일경우 자리를 바꾸는 식으로 비교를 진행한다. a보다 b가 클 경우 양수이므로 뒷요소가 클때 자리를 바꾸지 않는다. 다시말해 더욱 큰 요소가 뒤로 가도록 정렬되어 내림차순 정렬이 수행된다.
• reduce
구조 :
arr.reduce((accumulator, currentValue, currentIndex, array) => {
// 연산할 내용
}, initialValue);
배열의 각 요소를 순차적으로 연산하여 최종적으로 하나의 값으로 반환해주는 함수이다.
- accumulator : 이전 함수 호출에서 반환된 값(연산이 누적된 값)
- currentValue : 현재 배열 요소
- currentIndex(선택) : 현재 배열 인덱스
- array : 현재 배열
- initialValue : accumulator의 초기값, 지정하지 않으면 배열의 첫번째 요소가 초기값으로 설정됨.
ex) Aarr.reduce((acc, value, index) => acc + value * Barr[index], 0)
Aarr 이라는 배열에 대해 연산을 진행한다. acc라는 누적값에 Aarr 배열의 값과 Barr 배열의 값을 순차적으로 곱하여 모두 더하는 역할을 한다.
'기타 > 알고리즘' 카테고리의 다른 글
(JS) 반복문의 break [Programmers - 붕대 감기] (0) | 2024.10.04 |
---|---|
(JS) Set [Programmers - 신고 결과 받기] (0) | 2024.10.01 |
(JS) 객체를 배열로 변환, 절댓값 [Programmers - 성격 유형 검사하기] (0) | 2024.09.30 |
(JS) 동적 객체 key와 배열/객체 탐색 [Programmers - 달리기 경주] (0) | 2024.09.30 |
(JS) 문자열과 숫자 변환 - split, map, toString, padStart [Programmers - 동영상 재생기] (0) | 2024.09.28 |