백준

[백준] 보물 (JAVA)

코 밑 2025. 2. 1. 17:38
Contents

https://www.acmicpc.net/problem/1026

 

같은 크기의 양의 정수 배열 두개를 입력받는다.

이 배열의 각각 한개의 정수끼리 곱해 모두 더한다.

이때 나올 수 있는 최솟값을 출력한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

// 백준 보물
// 정수가 담긴 두 배열이 주어진다. 두 배열의 정수간으 곱의 합이 최솟값이 나오게 하라.
// 한 배열은 오름차순 정렬, 다른 배열은 내림차순 배열해서 서로 곱해주면 된다.
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        int[] arr1 = new int[num];
        int[] arr2 = new int[num];

        // 첫번째 배열
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < num; i++) {
            arr1[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr1);

        // 두번째 배열
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < num; i++) {
            arr2[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr2);
        // 1은 오름차순, 2는 내림차순
        int answer = 0;
        for (int i = 0; i < num; i++) {
            answer += arr1[i] * arr2[num - i - 1];
        }
        System.out.println(answer);
    }
}

어렵지 않은 문제다.

최솟값이 나오려면 큰수 * 작은수를 하면 된다.

즉 각각의 배열을 오름차순, 내림차순 정렬해서 같은 인덱스끼리 곱해서 합해주면 된다.

 

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

[백준] 이친수 (JAVA)  (3) 2025.02.03
[백준] 방 번호 (JAVA)  (1) 2025.02.01
[백준] 요세푸스 문제 0 (JAVA)  (2) 2025.02.01
[백준] 수 찾기(1920) (JAVA)  (3) 2023.07.27
[백준] 다리 놓기(1010) (JAVA)  (2) 2023.07.18