프로그래머스 최솟값 만들기
길이가 같은 배열 A, B에는 숫자가 담겨있습니다.
A 배열의 요소 하나와 B배열의 요소 하나를 뽑아서 두 수를 곱한 값의 누적이 가장 작은 값을 반환하세요. (단, 한 번 뽑은 값은 다시 뽑을 수 없습니다.)
누적이 가장 적은 값을 반환하기 위해서는 한개의 배열 중 가장 작은 값과 다른 배열의 가장 큰 값 순으로 조합하여 곱해주어야합니다.
let answer = 0;
먼저 값을 반환할 answer 변수를 선언해줍니다.
A.sort((a,b) => a-b);
B.sort((a,b) => b-a);
A배열은 오름차순, B배열은 내림차순 정렬하여줍니다.
(어떤 배열을 오름차순하든 상관없습니다.)
for(let i = 0; i < A.length; i++){
answer += A[i] * B[i]
}
return answer;
배열의 길이만큼 실행하는 반복문을 만들어 준 후,
A와 B배열의 i번째 요소끼리 곱하고 answer에 누적해줍니다.
최종 answer를 반환합니다.
function solution(A, B){
let answer = 0;
A.sort((a,b) => a-b);
B.sort((a,b) => b-a);
for(let i = 0; i < A.length; i++){
answer += A[i] * B[i]
}
return answer;
}
function solution(A,B){
A.sort((a, b) => a - b)
B.sort((a, b) => b - a)
return A.reduce((total, val, idx) => total + val * B[idx], 0)
}
reduce
메서드를 사용하여 A와 B를 순서대로 곱한 값을 누적하였습니다.