Algorithm
[Conc & Sol] 정렬을 활용하여 최솟값을 구하는 문제
Uykm
2024. 6. 28. 18:58
▼ Why ? What ?
1일 1알고리즘 스터디에서 "최솟값 만들기"라는 문제를 풀었다. 문제를 해결하는 방법을 쉽게 생각할 수 있었는데, 내림차순 정렬을 하려는 과정에서 한 가지 개념을 놓쳐서 ChatGPT의 도움을 받아 해결하게 되었다.
▼ 알고리즘 문제 : "최솟값 만들기"
최솟값 만들기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
기본형 배열을 내림차순 정렬할 때 주의할 점 (cf. `Arrays.sort()` )
- Arrays.sort는 원래 기본형 배열(int[])에 대해서는 두 번째 인자를 받지 않으며, `Collections.reverseOrder()`는 객체 배열에서만 사용할 수 있다 !
// 타입 변환 없이 내림차순 정렬하는 방법
Arrays.sort(B);
for (int i = 0; i < B.length / 2; i++) {
int temp = B[i];
B[i] = B[B.length - 1 - i];
B[B.length - 1 - i] = temp;
}
// Wrapper 클래스 이용하는 방법
Integer[] boxedB = Arrays.stream(B).boxed().toArray(Integer[]::new);
Arrays.sort(boxedB, Collections.reverseOrder());
[ 나의 해결 코드 ]
- 매번 하나의 배열에선 가장 큰 값을 다른 하나의 배열에선 가장 작은 값을 뽑아서 곱하여 누적값을 더하도록 하는 것이 "가장 작은 누적값"이 나올 수 있는 경우이다.
import java.util.*;
class Solution{
public int solution(int []A, int []B){
int answer = 0;
Integer[] boxedB = Arrays.stream(B).boxed().toArray(Integer[]::new);
// 가장 작은 것과 가장 큰 것을 곱하도록
Arrays.sort(A);
Arrays.sort(boxedB, Collections.reverseOrder());
for (int i = 0; i < A.length; ++i) {
answer += A[i] * boxedB[i];
}
return answer;
}
}