프로그래머스 [최솟값 만들기] - 구현 Lv.2

JH.P·2022년 8월 10일

구현

  • 주어진 문제의 조건을 잘 이해하고, 일치하는 답을 반환하는 문제이다.

문제 상황 + 로직

  • 문제에서는 두 개의 길이가 같은 배열이 주어진다.
  • 그리고 두 배열 각각 요소를 하나씩 뽑아서 곱한다. 그리고 그 다음 각각 요소를 뽑아 곱하여 이전에 곱했던 값과 합한다. 이 과정을 각 배열 모든 요소에 대해 진행한다.
  • 그리고 이 곱한 값들의 누적합을 최소로 만들어야한다.
  • 이를 만족하기 위해서, 두 배열을 각각 A, B라고 한다면 A는 오름차순으로 정렬하고 B는 내림차순으로 정렬한다.
  • 그 이유는 두 배열 모두 같은 기준으로 정렬이 되어있으면, 뒤로 갈수록 큰 값과 큰 값이 곱해져 매우 큰 값이 나올 수 있기 때문에 균형을 맞춰주기 위함이다.
    • 한쪽은 작은 값에서 큰 값으로 증가, 그리고 다른 한 쪽은 큰 값에서 작은 값으로 감소하면 두 배열 요소의 곱을 서로 차례대로 곱한 값은 최대한 작아진다.

코드

function solution(A,B){
    A.sort((a, b) => a - b)
    B.sort((a, b) => b - a)
    let sum = 0
    for(let i = 0; i < A.length; i++) {
        sum = sum + A[i] * B[i]
    }
    return sum
}
profile
꾸준한 기록

0개의 댓글