문제
옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.
길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.
S = A[0] × B[0] + ... + A[N-1] × B[N-1]
S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.
S의 최솟값을 출력하는 프로그램을 작성하시오.
풀이
B는 재배열하면 안된다 했지만 재배열을 한다. A는 오름차순으로 정렬하고 B는 내림차순으로 정렬하면 두 곱의 합이 최소가 된다.
내림차순으로 정렬할 때는Arrays.sort(B, Collections.reverseOrder());
를 사용한다.
이 때 B가 객체(Integer) 배열이어야 한다.
코드
package BOJ.sorting;
import java.util.*;
import java.io.*;
public class No1026_보물 {
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int N=Integer.parseInt(br.readLine());
int[] A=new int[N];
StringTokenizer st=new StringTokenizer(br.readLine());
for(int i=0;i<N;i++){
A[i]=Integer.parseInt(st.nextToken());
}
Arrays.sort(A);
Integer[] B=new Integer[N];
st=new StringTokenizer(br.readLine());
for(int i=0;i<N;i++){
B[i]=Integer.parseInt(st.nextToken());
}
Arrays.sort(B, Collections.reverseOrder());
int S=0;
for(int i=0;i<N;i++){
S+=(A[i]*B[i]);
}
System.out.println(S);
}
}
'알고리즘연습 > 백준' 카테고리의 다른 글
[BOJ] 2468번 안전영역 자바 - bfs (0) | 2022.06.21 |
---|---|
[BOJ] 11403번 경로찾기 java (0) | 2022.06.20 |
[백준] 1004번 어린왕자 java (0) | 2021.11.20 |
[백준] 배낭문제 - 7579번 앱 java (0) | 2021.11.08 |
[백준] 우선순위 큐 - 11286번 절댓값 힙 (0) | 2021.10.05 |