본문 바로가기
컴퓨터 공학/백준

[백준] JAVA 자바 : 보물 (1026번)

by kim-dev 2024. 2. 23.
반응형


문제가 길지만, 요약하자면 배열 두 개를 입력받아서 곱한 값 중 최소값을 출력하라는 것!

이건 진짜 굉장히 간단한데... A배열은 작은 값부터, B배열은 큰 값부터 곱해준 후 더하면 당연히 수열의 최솟값이 나오겠지??
왜냐고?? 전 그냥 그렇게 떠오르던데... 그래서 풀리니 풀리네요... 저도 증명은 못하겠읍니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.Comparator;
import java.lang.StringBuilder;

public class Treasure {

    public static int stoi(String str) {
        return Integer.parseInt(str);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = stoi(br.readLine());
        int[] arrayA = new int[N];
        int[] arrayB = new int[N];

        StringTokenizer st_a = new StringTokenizer(br.readLine());
        StringTokenizer st_b = new StringTokenizer(br.readLine());
        for(int i=0; i<N; i++) {
            arrayA[i] = stoi(st_a.nextToken());
            arrayB[i] = stoi(st_b.nextToken());
        }

        Arrays.sort(arrayA);
        Arrays.sort(arrayB);

        // A는 작은 수부터, B는 큰 수부터 차례로 곱해서 sum에 더한다.
        int sum = 0;
        for(int i=0; i<N; i++) {
            int tmp = arrayA[i] * arrayB[N-1-i];
            sum += tmp;
        }

        System.out.println(sum);
    }
}

 

 

로그인

 

www.acmicpc.net