최솟값 만들기

Mudi·2023년 1월 8일
0

[JavaScript] Coding Test

목록 보기
17/23
post-thumbnail

최솟값 만들기

프로그래머스 최솟값 만들기


문제

길이가 같은 배열 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를 순서대로 곱한 값을 누적하였습니다.

0개의 댓글