최솟값 만들기
문제정의
두 배열에서 한 숫자씩 뽑아 둘의 곱을 더해나갈 때 최솟값을 구하는 문제이다. 단 중복으로 숫자를 뽑는 것은 허용하지 않는다.
문제풀이
전체 코드는 다음과 같다. 최솟값을 만들기 위해선 각각의 배열에서 가장작은수와 가장큰수가 곱해져 나가야한다. 이를 생각해내면 코드는 단순하다. 두 배열을 정렬하고 하나는 앞에서부터 하나는 뒤에서부터 뽑아 곱해서 더하면 된다.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22package level2;
import java.util.Arrays;
public class MakeMin {
//프로그래머스 문제풀이 level2 최솟값 만들기
public static void main(String[] args) {
int[] A = {1, 4, 2};
int[] B = {5, 4, 4};
int answer = 0;
Arrays.sort(A);
Arrays.sort(B);
for(int i = 0; i < A.length; i++)
answer += A[i] * B[A.length-i-1];
System.out.println(answer);
}
}
최종적인 시간복잡도는 배열의 길이를 n이라고 할 때, 정렬을 사용하였으므로 \(O(nlogn)\)이다.