< 내 풀이 >
import java.util.*;
class Solution
{
public int solution(int []A, int []B)
{
Integer b[]=new Integer[B.length];
for(int i=0;i<B.length;i++){
b[i]=B[i];
}
Arrays.sort(A); //A 배열을 오름차순으로 정렬
Arrays.sort(b,Collections.reverseOrder()); //b 배열을 내림차순으로 정렬
int answer = 0;
for(int i=0;i<A.length;i++){
int times=A[i]*b[i];
answer+=times;
}
return answer;
}
}
✏️ 풀이 방법
A와 B 배열의 길이는 같고, 각각의 배열에서 숫자 하나를 뽑아 곱하고, 그 곱을 누적해서 더한 값이 최소가 되어야하므로
가장 작은 수와 가장 큰 수를 곱하게 만들어야한다. 따라서 A 배열은 오름차순으로 정렬하고, B배열은 내림차순으로 정렬하여 계산했다.
⚠️ Collections.reverseOrder() 을 사용할 때 주의할 점
Collections는 Object를 상속한 클래스에 대해서 사용 가능한 인터페이스이므로, String, Integer, Double 등과 같은 Object 타입의 배열은 Collections.reverseOrder() 사용이 가능하고, 기본 타입 (primitive type) 인 int, double, char, float 등은 사용이 불가하다.
=> 다른 사람들의 풀이를 봤을 때 굳이 이거를 안쓰고 , Arrays.sort() 로 정렬한 다음 이런식으로 한 사람들도 많았다. 이게 어떻게 보면 더 좋은 방법인 것 같다. 이렇게 하면 내가 했던 것처럼 int 형 배열을 Integer 배열로 바꾸지 않아도 된다.
for (int i = 0; i < length; i++) {
answer += A[i] * B[length - 1 - i];
}
참고 블로그
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 숫자의 표현 (1) | 2024.04.20 |
---|---|
[JAVA] 이진 변환 반복하기 (1) | 2024.04.18 |
[JAVA] JadenCase 문자열 만들기 (1) | 2024.04.18 |
[JAVA] 올바른 괄호 (0) | 2024.04.17 |
[JAVA] 붕대 감기 (0) | 2024.04.09 |