[백준 문제풀이] 1026번 보물 (with. JAVA)

RyeonD·2021년 9월 22일
0

알고리즘 문제풀이

목록 보기
5/11

백준 1026번 문제 바로가기

이번 문제는 입력된 두 배열의 원소를 각각 곱한 후 합하였을 때 최솟값이 되는 값을 구하는 문제이다. 처음에는 B에 있는 수를 재배열하면 안된다고 되어있어서 헤맸었다. 한참을 헤매다 이전에 Python으로 같은 문제를 푼 기억이 나서 B에 있는 수도 재배열함으로써 문제를 해결하였다.(B에 있는 수를 재배열해도 채점되는 것에는 문제가 없다.)

그리고 나는 BufferedReader를 이용하여 문제를 풀었지만, 입력받는 배열이 한 줄 띄어쓰기가 아닌 한 칸 띄어쓰기 되어있기 때문에 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);
	}
	
}
profile
I'm job hunting. I want to be a sw developer.

0개의 댓글