Contents
https://www.acmicpc.net/problem/1026
같은 크기의 양의 정수 배열 두개를 입력받는다.
이 배열의 각각 한개의 정수끼리 곱해 모두 더한다.
이때 나올 수 있는 최솟값을 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 백준 보물
// 정수가 담긴 두 배열이 주어진다. 두 배열의 정수간으 곱의 합이 최솟값이 나오게 하라.
// 한 배열은 오름차순 정렬, 다른 배열은 내림차순 배열해서 서로 곱해주면 된다.
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int[] arr1 = new int[num];
int[] arr2 = new int[num];
// 첫번째 배열
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < num; i++) {
arr1[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr1);
// 두번째 배열
st = new StringTokenizer(br.readLine());
for (int i = 0; i < num; i++) {
arr2[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr2);
// 1은 오름차순, 2는 내림차순
int answer = 0;
for (int i = 0; i < num; i++) {
answer += arr1[i] * arr2[num - i - 1];
}
System.out.println(answer);
}
}
어렵지 않은 문제다.
최솟값이 나오려면 큰수 * 작은수를 하면 된다.
즉 각각의 배열을 오름차순, 내림차순 정렬해서 같은 인덱스끼리 곱해서 합해주면 된다.
'백준' 카테고리의 다른 글
[백준] 이친수 (JAVA) (3) | 2025.02.03 |
---|---|
[백준] 방 번호 (JAVA) (1) | 2025.02.01 |
[백준] 요세푸스 문제 0 (JAVA) (2) | 2025.02.01 |
[백준] 수 찾기(1920) (JAVA) (3) | 2023.07.27 |
[백준] 다리 놓기(1010) (JAVA) (2) | 2023.07.18 |