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
'Algorithm 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 : 연속된 부분 수열의 합 - 자바[Java] (0) | 2024.03.21 |
---|---|
[프로그래머스] Lv.2 : 마법의 엘리베이터 - 자바[Java] (0) | 2024.03.20 |
[프로그래머스] Lv.2 : [3차] 압축 - 자바[Java] (0) | 2024.02.18 |
[프로그래머스] Lv.2 : [3차] n진수 게임 - 자바[Java] (1) | 2024.02.18 |
[프로그래머스] Lv.2 : 삼각 달팽이 - 자바[Java] (0) | 2024.02.16 |