문제

문제출처 : Baekjoon

img

풀이

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

    }
}

회고

  1. 문제에서는 B배열을 바꾸지 말라고해서, A배열을 비교해서 정렬하고 사용하려고 했는데 이부분은 내 실력의 한계로…ㅠㅠ 포기하고나서 다른분들의 정답을 찾아봤다. 그랬더니 다들 A는 정렬 B는역정렬 해서 그냥 풀었다.
    백준 질문함에도 나처럼 단, B에 있는 수는 재배열하면 안 된다. 는 무시해도 되는건가를 질문한 사람이 있었는데, 문제를 풀때 정말 누가 하나하나 검사하는것도 아니고(만약 대학에서 이런 문제가 나왔다면 정렬을 이용해서 풀어야했을것이다.) 답을 구하기 위해 더 효율적이거나 쉬운 방법을 사용할 수 있다면 얼마든지 사용하는것에 문제가 없다고 한다. 흠…
  2. 그래서 이 문제를 풀면서 내가 정렬부분도 정말 공부를 많이 해야겠구나 라고 느꼈다. 머리속으로는 어떻게 하면 정렬! 이라고 알겠는데, 직접 코드를 구현하려고 하니 너무 어렵다… ㅠㅠ 이부분은 많이 풀어봐야 늘겠지.