https://www.acmicpc.net/problem/1026
1. 아이디어
S의 최솟값은 작은 수와 큰 수의 곱의 합으로 이루어졌을 때라는 점을 활용한다.
2. 문제풀이
두 배열에서 가장 큰 수와 가장 작은 수를 매칭시키고 다음으로 큰 수와 다음으로 작은 수를 매칭시키는 과정을 반복하면 되므로 두 배열을 정렬한 후 인덱스를 하나는 정방향, 하나는 역방향으로 순회하며 곱해서 최솟값을 구해준다.
3. 코드
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));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int S = 0;
// 배열 A 입력 받아서 정렬
int[] A = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
A[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(A);
// 배열 B 입력 받아서 정렬
int[] B = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
B[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(B);
// 큰 수와 작은 수의 곱의 합이 최소
for (int i = 0; i < N; i++) {
S += A[i] * B[N - 1 - i];
}
System.out.println(S);
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 1541번 - 잃어버린 괄호 [Java] (0) | 2024.12.02 |
---|---|
[백준] 10430번 - 나머지 [Java] (1) | 2024.12.02 |
[백준] 11399번 - ATM [Java] (0) | 2024.12.02 |
[백준] 11047번 - 동전 0 [Java] (0) | 2024.12.02 |
[백준] 10820번 - 문자열 분석 [Java] (0) | 2024.12.02 |