백준 #1026 보물
문제 설명👩🏫
다음과 같이 함수 S를 정의하자.
S = A[0] × B[0] + ... + A[N-1] × B[N-1]
S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.
S의 최솟값을 출력해라.
입력
5
1 1 1 6 0
2 7 8 3 1
출력
18
내 코드💻
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int n = Integer.parseInt(str);
int [] A = new int[n];
int [] B = new int[n];
int sum = 0;
str = br.readLine();
StringTokenizer st = new StringTokenizer(str, " ");
for(int i=0;i<n;i++){
A[i] = Integer.parseInt(st.nextToken());
}
str = br.readLine();
st = new StringTokenizer(str, " ");
for(int i=0;i<n;i++){
B[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(A);
Arrays.sort(B);
for(int i=0;i<n;i++){
sum+= A[n-i-1]*B[i];
}
System.out.println(sum);
}
}
설명💡
처음에는 B는 그대로 두고 해야하는줄 알고, B의 순서를 따로 저장해서 A를 반대로 정렬해서 해야하나.. 하는 생각을 했다. 하지만 출력값이 그냥 S이기 때문에 A와 B를 각각 정렬하여 A는 반대로 B는 순서대로 해서 각각 곱한 값을 더해 sum을 구했다.
느낀 점 및 궁금한 점🍀
내림차순으로 배열을 정렬하는 법도 찾아봐야겠다.