본문 바로가기

코딩테스트/Programmers

[JAVA] 최솟값 만들기

< 내 풀이 >

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];
}

 

 

 

참고 블로그


https://sehyeok.tistory.com/190

'코딩테스트 > 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