A 배열은 오름차순, B 배열은 내림차순으로 정렬했을 때의 같은 위치의 인자를 곱해야 합계가 최소값이 된다.
아래 코드를 보면 int형 a[], Integer형 b[] 배열로 선언했다.
내림차순으로 배열을 정렬하기 위해서는 배열을 정렬한 후, 역순으로 List를 재정렬하는 Collections.reverseOrder()를 사용해야 하는데 b배열을 int형으로 선언했을 시에는 Arrays.sort(b, Collections.reverseOrder());와 같이 인식되지 못하는 오류가 발생했다.
https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Arrays.html
https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Collections.html
를 참고해보자.
Arrays에서는 sort(T[] a, Comparator c) method를 제공해준다.
Collections에서는 reverseOrder() method를 제공해준다.
sort(T[] a, Comparator c) 에서 사용되는 T는 Generic Class로 어떠한 객체도 허용하게 해주었지만, int는 객체가 아닌 primitive type이었던 것이다.
따라서 int[]가 아닌 Integer[]로 변경 해주면 컴파일 에러 없이 내림차순이 올바르게 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int sum=0;
int a[] = new int[N];
Integer b[] = new Integer[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) {
b[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(a);
Arrays.sort(b, Collections.reverseOrder());
for(int i=0; i<N; i++) {
sum += (a[i])*(b[i]);
}
System.out.println(sum);
}
}
reverseOrder(Comparator<T> cmp)
[출처]
https://www.acmicpc.net/problem/1026
'CODING > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 2178번 미로 탐색 (0) | 2022.03.02 |
---|---|
[BAEKJOON] 1748번 수 이어 쓰기 1 (0) | 2022.02.14 |
[BAEKJOON] 1120번 문자열 (0) | 2022.02.09 |
[BAEKJOON] 11047번 동전 0 (0) | 2022.02.08 |
[BAEKJOON] 1051번 숫자 정사각형 (0) | 2022.02.08 |
댓글