[伯俊解答]1026号宝物(with.JAVA)


白駿1026題ショートカットキー

この問題は,入力した2つの配列の要素をそれぞれ乗じて最大値を求めることである.最初はBの数字が並べ替えられずうろうろしていました.しばらくうろうろしていたが、以前はPythonで同じ問題を解決していたことを覚えていたので、Bの中の首都に並び直し、問題を解決した.△Bの数字を並べ替えても問題ありません.
その後、BufferedReaderで質問に答えましたが、入力された配列は1行のスペースではなく、1つのスペースなので、入力した値をreadline()としてParsingプロシージャを個別に追加する必要があります.だからScannerの方が便利だと思います.
BufferedReaderを使用して入力を受信する場合は、StringTokenizerを使用して入力した値をParsingします.
ソート自体は入力した数字の範囲が大きくないため、Arraysです.sort()を使用しました.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class P1026{

	public static void main(String[] args) throws IOException {
		
		// 해당 문제는 Scanner를 사용하는게 더 편리할 듯 함
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		int n = Integer.parseInt(br.readLine());
		int sum = 0;	// 마지막에 출력할 숫자(두 배열 원소 곱의 총합)
		
		int arrA[] = new int [n];
		int arrB[] = new int [n];
		
		st = new StringTokenizer(br.readLine());
		for(int i = 0; i < n; i++)
			arrA[i] = Integer.parseInt(st.nextToken());
		
		st = new StringTokenizer(br.readLine());
		for(int i = 0; i < n; i++)
			arrB[i] = Integer.parseInt(st.nextToken());
		
		br.close();
        
		// 정렬
		Arrays.sort(arrA);
		Arrays.sort(arrB);
		
		for(int i = 0; i < n; i++)
			sum += (arrA[i] * arrB[n-i-1]);
		
		System.out.println(sum);
	}
	
}