본문 바로가기

백준

[백준] 보물 (1026번)

728x90

코드 힌트

  1. 목표:
    • 두 배열의 원소를 재배열하여, 각 원소끼리 곱한 값들의 합이 최소가 되도록 계산하는 문제입니다.
  2. 정렬 방식:
    • arr1은 오름차순으로 정렬하고, arr2는 내림차순으로 곱셈을 진행합니다. 이렇게 하면, 큰 값과 작은 값이 곱해져 전체 곱셈 결과를 최소화할 수 있습니다.
  3. 곱셈과 합산:
    • arr1의 작은 값과 arr2의 큰 값을 곱해가며, 각 곱셈 결과를 result 변수에 누적하여 최소 값을 얻습니다.
  4. 배열 크기와 정렬:
    • 배열의 크기 n을 입력받고, 두 배열을 각각 정수 배열로 변환한 후, 정렬을 수행한 뒤 대응하는 원소들을 곱합니다.

정답은 더보기 클릭

더보기
import java.util.*;

class Main {
    public static void main(String[] args) {
        int result = 0; // 결과값을 저장할 변수
        Scanner in = new Scanner(System.in);
        
        int n = Integer.parseInt(in.nextLine()); // 배열의 크기 n 입력 받기
        
        int[] arr1 = new int[n]; // 첫 번째 배열
        int[] arr2 = new int[n]; // 두 번째 배열
        
        // 첫 번째 배열의 값들을 공백을 기준으로 분리하여 입력 받음
        String[] inputArr1 = in.nextLine().split(" ");
        // 두 번째 배열의 값들을 공백을 기준으로 분리하여 입력 받음
        String[] inputArr2 = in.nextLine().split(" ");
        
        // 입력받은 문자열 배열을 정수 배열로 변환
        for (int i = 0; i < n; i++) {
            arr1[i] = Integer.parseInt(inputArr1[i]);
            arr2[i] = Integer.parseInt(inputArr2[i]);
        }
        
        // 첫 번째 배열을 오름차순 정렬
        Arrays.sort(arr1);
        // 두 번째 배열을 오름차순 정렬
        Arrays.sort(arr2);
        
        // 각 배열의 대응되는 원소의 곱을 계산하되, 두 번째 배열은 내림차순으로 접근
        for (int i = 0; i < n; i++) {
            result += arr1[i] * arr2[n-i-1]; // arr1의 i번째 원소와 arr2의 역순 원소의 곱을 결과에 더함
        }
        
        // 결과 출력
        System.out.println(result);
    }
}
728x90

'백준' 카테고리의 다른 글

[백준] 감소하는 수 (1038번)  (0) 2024.10.01
[백준] 균형잡힌 세상 (4949번)  (0) 2024.09.23
[백준] 별 찍기 - 8  (0) 2024.09.19
[백준] 북극곰은 괄호를 찢어 (25918번)  (1) 2024.09.13
[백준] 다음 소수 (4134번)  (2) 2024.09.04