Seren dev's blog
article thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/12941

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

누적값이 최소가 되게 하는 경우를 찾기 위해 다음의 예시를 들어보았다.

A: [x, x+1]
B: [y, y+1]
1. x*(y+1) + (x+1)*y = xy + x  + xy + y = 2xy + x + y
2. xy + (x+1)*(y+1) = xy + xy + x  + y + 1 = 2xy + x + y + 1

 

A: [x, x+k]
B: [y, y+m]
1. x*(y+m) + (x+k)*y = xy + mx  + xy + ky = 2xy + mx + ky
2. xy + (x+k)*(y+m) = xy + xy + mx  + ky + mk = 2xy + mx + ky + mk

 

위 예시를 살펴보면, A를 오름차순하고 B를 내림차순한 다음 순서대로 곱해서 누적해서 더한 값이 최소가 되는 것을 알 수 있다.

코드

import java.util.*;

class Solution
{
    
    public int solution(int []A, int []B)
    {
        Arrays.sort(A);
        reverseSort(B);
        
        int sum = 0;
        for (int i = 0; i < A.length; i++) {
            sum += A[i] * B[i];
        }
        return sum;
    }
    
    static void reverseSort(int[] B) {
        Arrays.sort(B);
        for (int i = 0; i < B.length / 2; i++) {
            int temp = B[i];
            B[i] = B[B.length - 1 - i];
            B[B.length - 1 - i] = temp;
        }
    }
}

 

728x90
profile

Seren dev's blog

@Seren dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!