본문 바로가기
알고리즘/백준 문제풀이

백준 [자바 java] 1026 : 보물

by 잔디🌿 2023. 7. 23.

    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);
    
     }
    
     }