알고리즘/백준 문제풀이

백준 [자바 java] 1026 : 보물

잔디🌿 2023. 7. 23. 16:20

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

 

1026번: 보물

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거

www.acmicpc.net

이 문제는 두 배열이 주어지고 두 배열간의 곱한 값을 더한 값이 최소가 되게 하는 문제이다.

핵심은 곱하는 두 수가 둘 다 큰 수이면 수가 많이 커지니까 이를 적절하게 조합하는 것이다. 가장 큰 수에는 가장 작은수를 곱하는 과정을 하기 위해서 두 배열을 다 정렬한 후 첫번째 배열은 앞에서부터, 두번째 배열은 뒤에서부터 곱해서 더해나가면 답을 구할 수 있다.

 

import java.util.*;
import java.io.*;


class Main{
	
 public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    
    StringBuilder sb = new StringBuilder();
    int n = Integer.parseInt(br.readLine());
    StringTokenizer st = new StringTokenizer(br.readLine());
    int[] arr1 = new int[n];
    int[] arr2 = new int[n];
  
    
    for(int i = 0;i<n;i++) {
    	int a = Integer.parseInt(st.nextToken());
    	arr1[i] = a;
    	

    }
    st = new StringTokenizer(br.readLine());
    
    for(int i = 0;i<n;i++) {
    	int a = Integer.parseInt(st.nextToken());
    	arr2[i] = a;
    	
    }
    
      Arrays.sort(arr1);
      Arrays.sort(arr2);
    
   
    
    int cnt = 0;

   
    
    for(int i = 0;i<n;i++) {
    	    	cnt+= (arr1[i]*arr2[n-i-1]);
    }
   
    System.out.println(cnt);

 }

 }