백준 1026번: 보물

kgh128·2023년 1월 28일

코드: https://github.com/kgh128/Problem-Solving/blob/main/src/Baekjoon/p1026.java


1. 정렬

S의 값을 가장 작게 만드려면 A에서 값이 작은 원소와 B에서 값이 큰 원소를 곱하고, A에서 값이 큰 원소와 B에서 값이 작은 원소를 곱해야 한다. 그러므로 A 배열과 B 배열을 서로 반대로 정렬하면 된다.

  • A 배열: 오름차순 정렬
  • B 배열: 내림차순 정렬
Integer[] A = new Integer[N];
Integer[] B = new Integer[N];

Arrays.sort(A);
Arrays.sort(B, Collections.reverseOrder());

내림차순으로 정렬하기 위해 sort()의 두번째 인자로 Collections.reversOrder()를 전달한다. Collections.reverseOrder()Comparator 객체이므로 이를 통해 비교할 때는 int가 아니라 Integer를 사용해야 한다. 따라서 AB 모두 Integer 배열로 만들었다.


2. S의 최솟값 계산

반복문을 돌면서 정렬한 AB 배열의 원소들을 곱해서 더한다.

for (int i = 0; i < N; i++) {
	S += A[i] * B[i];
}

0개의 댓글