알고리즘/백준 문제풀이
백준 [자바 java] 1026 : 보물
잔디🌿
2023. 7. 23. 16:20
https://www.acmicpc.net/problem/1026
1026번: 보물
첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거
www.acmicpc.net
이 문제는 두 배열이 주어지고 두 배열간의 곱한 값을 더한 값이 최소가 되게 하는 문제이다.
핵심은 곱하는 두 수가 둘 다 큰 수이면 수가 많이 커지니까 이를 적절하게 조합하는 것이다. 가장 큰 수에는 가장 작은수를 곱하는 과정을 하기 위해서 두 배열을 다 정렬한 후 첫번째 배열은 앞에서부터, 두번째 배열은 뒤에서부터 곱해서 더해나가면 답을 구할 수 있다.
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] arr1 = new int[n];
int[] arr2 = new int[n];
for(int i = 0;i<n;i++) {
int a = Integer.parseInt(st.nextToken());
arr1[i] = a;
}
st = new StringTokenizer(br.readLine());
for(int i = 0;i<n;i++) {
int a = Integer.parseInt(st.nextToken());
arr2[i] = a;
}
Arrays.sort(arr1);
Arrays.sort(arr2);
int cnt = 0;
for(int i = 0;i<n;i++) {
cnt+= (arr1[i]*arr2[n-i-1]);
}
System.out.println(cnt);
}
}