[백준] 1026번 보물
문제
문제출처 : Baekjoon
풀이
import java.util.*;
public class Main {
public int solution(int N, int[] A, int[] B){
int answer = 0;
Arrays.sort(A);
Integer[] Barr = Arrays.stream(B).boxed().toArray(Integer[] :: new);
Arrays.sort(Barr, Collections.reverseOrder());
for(int i = 0; i < N; i++){
answer += A[i]*Barr[i];
}
return answer;
}
public static void main(String[] args) {
Main function = new Main();
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] A = new int[N];
int[] B = new int[N];
for(int i = 0; i < N; i++){
A[i] = sc.nextInt();
}
for(int i = 0; i < N; i++){
B[i] = sc.nextInt();
}
System.out.println(function.solution(N, A, B));
}
}
회고
- 문제에서는 B배열을 바꾸지 말라고해서, A배열을 비교해서 정렬하고 사용하려고 했는데 이부분은 내 실력의 한계로…ㅠㅠ 포기하고나서 다른분들의 정답을 찾아봤다. 그랬더니 다들 A는 정렬 B는역정렬 해서 그냥 풀었다.
백준 질문함에도 나처럼 단, B에 있는 수는 재배열하면 안 된다. 는 무시해도 되는건가를 질문한 사람이 있었는데, 문제를 풀때 정말 누가 하나하나 검사하는것도 아니고(만약 대학에서 이런 문제가 나왔다면 정렬을 이용해서 풀어야했을것이다.) 답을 구하기 위해 더 효율적이거나 쉬운 방법을 사용할 수 있다면 얼마든지 사용하는것에 문제가 없다고 한다. 흠… - 그래서 이 문제를 풀면서 내가 정렬부분도 정말 공부를 많이 해야겠구나 라고 느꼈다. 머리속으로는 어떻게 하면 정렬! 이라고 알겠는데, 직접 코드를 구현하려고 하니 너무 어렵다… ㅠㅠ 이부분은 많이 풀어봐야 늘겠지.