안녕하세요, 오늘은 백준의 1026번 문제를 풀어보겠습니다. 이번 문제는 금방 풀었지만, 저는 문제를 풀 때 바로 풀리는 문제보다, 2~3일이 걸리는 문제가 더 많았습니다. 처음에는 문제 풀이를 고민하는 시간이 조금이라도 길어지면 여기저기 찾아보고 풀었지만, 기억에 오래 남지 않고 학습 효과가 떨어진 듯했습니다. 이후 며칠이 걸리더라도 혼자 생각해보면 갑자기 문득 생각이 나서 문제를 풀 수 있게 되는 경우가 많았던 것 같습니다. 이렇게 문제를 푼 뒤 챗지피티에 제출을 해 코드 리뷰를 받고, 보완하는 형식으로 진행을 하고 있습니다. 다소 시간이 오래 걸리더라도 혼자 생각을 하는 시간이 많아지는, 이러한 방식이 학습효과가 더 컸던 것 같습니다. 그러면 문제를 풀어보겠습니다.


√ 문제 풀이 정리
S의 최솟값을 구하는 방법은, A의 최댓값과 B의 최솟값을 서로 대응시켜야 합니다.
하지만, 문제의 조건에는 B의 재배열을 금지하는 조건이 있습니다. 따라서 B를 직접 정렬하지 않고, B의 복사본을 생성한 뒤
A는 최대값으로, B의 복사본은 최솟값으로 정렬했습니다.
현재 컬렉션 프레임워크를 공부하고 있어, 배열의 크기가 고정된 문제임에도, 연습을 위해 컬렉션 프레임워크를 사용했습니다.
√ 코드
package baekjoon_example; import java.util.*; public class Main_1026_3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int capacity = scanner.nextInt(); scanner.nextLine(); List<Integer> arrA = new ArrayList<>(); List<Integer> arrB = new ArrayList<>(); for (int i = 0; i < capacity; i++) { int number = scanner.nextInt(); arrA.add(number); } for (int i = 0; i < capacity; i++) { int number = scanner.nextInt(); arrB.add(number); } int multiplySum = 0; List<Integer> sortArrB = new ArrayList<>(arrB); Collections.sort(arrA); Collections.sort(sortArrB, (i1, i2) -> i2 - i1); for (int i = 0; i < arrA.size(); i++) { multiplySum += arrA.get(i) * sortArrB.get(i); } System.out.println(multiplySum); } }