최솟값 만들기
자연수로 이루어진 길이가 같은 수열 A,B가 있습니다. 최솟값 만들기는 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱한 값을 누적하여 더합니다. 이러한 과정을 수열의 길이만큼 반복하여 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다.
예를 들어 A = [1, 2] , B = [3, 4] 라면
1. A에서 1, B에서 4를 뽑아 곱하여 더합니다.
2. A에서 2, B에서 3을 뽑아 곱하여 더합니다.
수열의 길이만큼 반복하여 최솟값 10을 얻을 수 있으며, 이 10이 최솟값이 됩니다.
수열 A,B가 주어질 때, 최솟값을 반환해주는 getMinSum 함수를 완성하세요.
내 코드
[파이썬]
def getMinSum(a, b):
sort_a = sort_list(a)
sort_b = sort_list(b)
result = 0
for idx in range(0, len(a)):
result += a[idx]*b[len(a)-idx-1]
return result
def sort_list(li):
for idx in range(len(li)-1):
if li[idx] > li[idx+1]:
li[idx], li[idx+1] = li[idx+1], li[idx]
if li[0] > li[1]:
li[0], li[1] = li[1], li[0]
return li
print(getMinSum([1, 2, 3], [4, 5, 6]))
[자바]
class TryHelloWorld {
int idx;
public int getMinSum(int []A, int []B) {
int answer = 0;
for(idx=0; idx<A.length; idx++) {
answer += A[idx]*B[(A.length-1)-idx];
}
return answer;
}
public int[] getSortedArray(int[] array) {
int temp;
for(idx=0; idx<array.length-2; idx++) {
if(array[idx] > array[idx+1]) {
temp = array[idx];
array[idx] = array[idx+1];
array[idx+1] = temp;
}
}
if(array[0] > array[1]) {
temp = array[0];
array[0] = array[1];
array[1] = temp;
}
return array;
}
public static void main(String[] args) {
TryHelloWorld test = new TryHelloWorld();
int []A = {1,2,3};
int []B = {4,5,6};
System.out.println(test.getMinSum(A,B));
}
}