프로그래머스/2단계

2. 최솟값 만들기

js0616 2024. 3. 5. 09:20

2개의 배열 A = [ ] , B = [ ]   에서 각각 1개씩 숫자를 뽑아 곱한 값들을 모두 더했을때 최소가 되는 값을 return 하는 문제

 

ex . 예시

 

A = [1,2,3,4,5]

B = [1,2,3,4,5] 

 

꺼내는 방법은 여러개가 있지만 

둘다 서로 작은걸 꺼낼 경우 

1*1 + 2*2+ 3*3 + 4*4 + 5*5  == 55 가 되며

하나는 큰것 하나는 작은걸 꺼낼 경우

1*5 + 2*4 + 3*3 + 4*2 + 5*1  == 35 이 되며 

 

무작위로 꺼낸다고 가정하면

1*4+2*5+3*2+4*1+5*3 == 39

 

2번째 방법이 최소값이 될것으로 예상이 된다. 

 

입력받은 배열은 중복도 있고 정렬이 되어있지 않다는것을 고려하여 문제를 풀면 다음과 같다. 

 

def solution(A,B):
    answer = 0

    # 1. 정렬
    A.sort()
    B.sort()
   
    # 2. 계산
   
    for i in range(len(A)):
        answer += A[i] * B[len(A)-1-i]

    return answer