코딩 테스트/백준

[백준] 1026번: 보물 (실버4, JAVA)

Nirsa 2023. 12. 18. 23:41
반응형

 

문제 링크 : https://www.acmicpc.net/problem/1026

 

1026번: 보물 (실버4, JAVA)

해당 문제는 (낮은 A값) * (높음 B값) 을 반복하며 계산하면 S의 최솟값을 구할 수 있습니다. 다만 이 문제에서는 함정(?)이 있는데 B에 있는 수는 재배열을 하면 안된다고 적혀있지만, 채점기에서는 B의 수를 재배열 했는지 판단을 할수가 없어서 재배열하고 문제를 풀어도 통과됩니다(......)

 

 

반환할 변수 S를 선언 및 초기화 하고, 사용자로부터 숫자를 입력 받습니다. 단, 숫자를 입력 받을 때 공백을 기준으로 String 배열로 만든 후 int 배열로 변환 합니다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int S = 0;
int N = Integer.parseInt(br.readLine());
String[] strA = br.readLine().split(" ");
String[] strB = br.readLine().split(" ");

int[] intA = new int[N];
Integer[] intB = new Integer[N];

// int 배열로 변환
for (int i = 0; i < N; i++) {
    intA[i] = Integer.parseInt(strA[i]);
    intB[i] = Integer.parseInt(strB[i]);
}

 

intA를 오름차순 정렬하고 intB를 내림차순으로 정렬하게 되면 (낮은 A값) * (높은 B값)을 만들어 최소값을 가지는 S를 구할 수 있습니다.

// 오름차순 정렬
Arrays.sort(intA);

// 내림차순 정렬
Arrays.sort(intB, Collections.reverseOrder());

for(int i=0; i<N; i++) {
    S += intA[i] * intB[i];
}

System.out.println(S);
반응형