본문 바로가기
알고리즘/프로그래머스

프로그래머스 Lv2 최솟값 만들기 (python)

by 개발하는 호랑이 2024. 2. 2.

최솟값 만들기

풀이

처음엔 어떻게 하지 인덱스를 다 돌리면서 확인을 해야하는건가 아니면 완전탐색을 이용해야하는 건가 그런 생각을 하다가, 수학적 접근을 했다.
최솟값을 만들어야 하는데 최댓값이 나오는 제일 먼저는 A의 제일 큰 수와 B의 제일 큰 수를 곱하고, 그 다음의 큰 수와 그 다음의 큰 수를 곱하기 를 반복하면 만들 수 있는 최댓값이 된다.
그러면 최솟값은 내가 가진 제일 큰 수를 제일 작은 수와 곱하고, 그 다음 큰 수를 그다은 제일 작은 수와 곱하기를 반복하면 된다. 이유는 어쨌든 모든 수는 한 번씩은 곱해져야하니까.

이 방법으로 A와 B 둘 모두 정렬시키고, 하나는 오름차순, 다른 하나는 내림차순으로 진행하였다.
그리고 for문을 통해 각 곱의 합을 진행시켜주니 해결되었다.

def solution(A,B):
    N = len(A)
    A = sorted(A)
    B = sorted(B, reverse=True)
    sum_value = 0
    for i in range(N):
        sum_value += (A[i]*B[i])
    return sum_value

다른 사람 풀이

zip함수를 사용했지만, 내가 풀이한 방법과 동일하다고 보면 된다.

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