https://www.acmicpc.net/problem/1026
백준 1026번 보물 문제 링크입니다.
핵심
A와 B배열을 받아서 두 배열의 값들을 곱해서 최솟값을 만드는 것이다. 쉽게 생각하면, 큰 값과 큰 값이 곱해지면 총합이 커지게 된다. 즉 작은 값과 큰 값을 곱해야 한다.
정답 코드
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Integer[] A = new Integer[N];
int[] B = new int[N];
for (int i=0;i<N; i++){
A[i]=sc.nextInt();
}
for (int i=0;i<N; i++){
B[i]=sc.nextInt();
}
Arrays.sort(A, Collections.reverseOrder());
Arrays.sort(B);
int sum=0;
for (int i=0; i <N; i++){
sum = sum+A[i]*B[i];
}
System.out.println(sum);
}
}
해설
위에서 설명한 대로, 작은 값과 큰 값을 곱해야 하는데, 쉽게 곱하려면, 두 배열을 정렬해야 한다.
B의 경우 오름차순으로 기존에 쉽게 알고 있던 sort를 사용하였다.
A의 경우 반대로 내림차순으로 정렬한다.
내림차순의 정렬 방법은 Arrays.sort(배열, Collections.reverseOrder())을 사용한다.
이때, A의 타입을 Integer로 둔 이유는 내림 차순을 할 때 배열의 타입이 T타입이므로,
int가 올 수 없기 때문이다.
개선점이나 오류가 있다면, 댓글 부탁드립니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
*다중 반복문* 숫자 피라미드(java, 알고리즘) (0) | 2022.09.04 |
---|---|
[백준]1302번 베스트셀러(java) (0) | 2022.09.04 |
[백준]1373번 2진수 8진수(java) (0) | 2022.08.28 |
[백준]1259번 팰린드롬수(java) (0) | 2022.08.22 |
[백준]1932번 정수 삼각형(java) (0) | 2022.08.16 |