길이가 같은 배열 2개가 있다
[1,4,2][5,4,4]
각 배열에서 숫자 하나씩 뽑아 서로 곱한다
그렇게 각 숫자들을 곱한다음 다 더한 합이 가장 작은경우를 출력하시오
ex) (15)+(44)+(2*4) = 29
위의 경우가 최솟값이 된다
배열에서 수를 뽑아 곱하는것이 경우의 수는 너무 많다
당장 위의 배열만해도 경우의수가 엄청난데 배열의 길이가 1000이되면 분명 시간 오버가 뜰것이다.
그래서 생각했다. 어떻게 곱해야 제일 작은 수가 나올까
답은 간단하다. 제일 큰 수를 제일 작은수와 곱해준다
즉 배열을 오름차순으로 정렬후 큰수 --- 작은수 매칭을 시켜준다
이렇게하면 큰수가 적게 곱해지면서 작은 수를 구할 수 있게된다
import java.util.*;
class Solution
{
public int solution(int []A, int []B)
{
int answer = 0;
Arrays.sort(A);
Arrays.sort(B);
int c = B.length-1;
for(int i=0; i<A.length; i++) {
answer += A[i] * B[c];
c--;
}
return answer;
}
}
Arrays util을 이용해 배열을 오름차순 정렬시켜주었다
그리고 int c를 배열의 길이의-1을 주어 최대값에 위치시켰다
그리고 for문을 이용해 A의 최솟값A[i]와 B의 최댓값 B[c]를 곱한다음 answer에 더해주었다
이렇게되면 for문이 순회를하며 자연스럽게 처음부터끝까지 곱해준다