코딩 테스트/자바

[프로그래머스 / 자바 / Lv.2] 12941 최솟값 만들기

HHRR 2024. 7. 11. 13:47
문제

풀이

 

두 배열의 각 원소의 곱의 누적합이 최소가 되도록 하는 문제다.

각 원소의 곱의 누적합이 최소가 되려면, 오름차순 정렬한 배열과 내림차순 정렬한 배열의 각 원소를 곱해준 후에 누적합을 구해주면 최솟값이 된다.

 

1. 자바에서는 int[] 배열을 내림차순으로 정렬하지 못하므로, 일단 각각 A, B 배열을 오름차순 정렬을 해준다.

2. A배열은 원소의 시작인 i 부터, B 배열은 원소의 끝인 (len-1)-i 부터 역순으로 원소를 곱해주고, answer에 합을 누적한다. 

 

class Solution{
        public int solution(int []A, int []B){
            int len = A.length;
            int answer = 0;
            Arrays.sort(A);
            Arrays.sort(B); // int[] 배열은 내림차순 정렬이 안됨
            for(int i=0; i<len; i++){
                answer += A[i] * B[(len-1)-i]; // B배열은 역순으로 곱해주기
            }
            return answer;
        }
    }