출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

이 문제는 여러가지의 풀이를 생각해낼 수 있었지만 우선 내가 생각해낸 가장 직관적인 풀이만 소개하도록 하겠다.

def solution(A,B):
    answer = 0
    A.sort()
    B.sort()
    for i in range(len(A)):
        answer += A[0]*B[-1]
        del A[0]
        del B[-1]
    return answer

매우 간단하다. 곱의 합들이 최솟값이 되려면 A의 가장 큰 값 또는 작은 값을 B의 가장 작은 값 또는 큰 값에 각각 곱해주고 더해주면 된다. 이를 시간 초과가 뜨지 않게 하기 위해서 먼저 A, B를 sort()를 통해 순서대로 정렬 후, 작은 값과 큰 값을 곱해주는 방식으로 문제를 풀었다.


다른 사람의 풀이

다음은 프로그래머스에서 가장 많은 좋아요를 받은 풀이이다

def solution(A,B):
    return sum(a*b for a, b in zip(sorted(A), sorted(B, reverse = True)))

매우 간단하게 zip함수와 sorted()함수를 이용하여 푼 모습이다.