두 행렬의 요소들을 순서대로 곱해서 최종 값이 최소여야 하는 문제이다. 곱들의 합이 최소가 되기 위해선 순서가 필요해 보인다. 정렬이 필요하다.
막상 배울땐 어영 부영 넘어간 API부분이 코테연습할땐 아쉽고 더 열심히 할껄 싶다. 직접 정렬을 구현해되 되겠지만 사실 기억도 잘 안나고 막상 테스트볼땐 시간도 없을것 같으니 API로 정렬을 외우는게 더 효과적일것 같다.
import java.utils.Arrays;
로 자바로 배열과 관련된 API를 호출할 수 있게 임포트 한다.
Arrays.sort(A); //A배열 정렬
Arrays.sort(B); //B배열 정렬
Arrays.sort(배열)
메소드로 간단히 배열의 요소들을 오름차순으로 정렬할 수 있다. 매우 유용한것 같다.
곱들의 합이 최소가 되기 위해선 어떻게 해야 할까? 순차적으로 최대요소들과 최소요소들을 곱하면 합이 가장 작은 수일 것이다. 그러기 위해선 A배열에선 최소를 B배열에선 최대를 각각 가져왔다.
for(int i=0;i<counter;i++){ answer += (A[i] * B[길이-1]); }
B배열은 오름차순으로 정렬되어있으니 역순으로 읽으면
내림차순이 될 것이다.
import java.util.Arrays; //배열 패키지
class Solution
{
public int solution(int []A, int []B)
{
int answer = 0;
int counter = A.length;
Arrays.sort(A); //정렬
Arrays.sort(B); //정렬
//두수의 곱이 최소가 되려면 최대와 최소를 곱해야 함
for(int i=0;i<counter;i++){
answer += (A[i] * B[counter-i-1]); //counter-1은 마지막 요소index가 길이-1이므로
}
return answer;
}
}