Posts [알고리즘] 프로그래머스 - 최솟값 만들기
Post
Cancel

[알고리즘] 프로그래머스 - 최솟값 만들기


문제

강의에 들어있는 문제라서 문제 링크를 걸어도 되는지 모르겠다.

길이가 같은 배열 A, B가 있다.
A, B 배열에서 각각 한 개의 숫자를 뽑아 두 수를 곱하는 과정을 길이만큼 반복하며,
곱한 값을 누적하여 더한다. (중복으로 뽑을 수는 없다)
이때 최종적으로 누적된 값이 최소가 되도록 하자.
A, B의 크기 : 1000이하의 자연수
A, B의 원소의 크기 : 1000이하의 자연수


입출력 예시

ABreturn
[1, 4, 2][5, 4, 4]29
[1, 2][3, 4]10


접근

직관적으로 봤을 때, 가장 작은 수와 가장 큰 수를 곱한다면 전체 합이 가장 작다는 건 알겠다.

\[A = {a_1, a_2, ..., a_n}\] \[B = {b_1, b_2, ..., b_n}\] \[a_1 < a_2 < ... < a_n\] \[b_1 > b_2 > ... > b_n\]

인 경우,

\[\sum_{n=1}^{n} a_n * b_n\]

이 항상 최소라는 사실을 어떻게 증명할 수 있을까?

누가 알려줬음 좋겠다.


코드

  • 파이썬 코드
1
2
3
4
5
6
7
8
def solution(A,B):
    A.sort()
    B.sort(reverse = True)
    answer = 0
    for i in range(len(A)):
        answer = answer + A[i]*B[i]

    return answer


This post is licensed under CC BY 4.0 by the author.

[알고리즘] 프로그래머스 - 가장 큰 수

[프로그래머스 인공지능스쿨] Week1-3 파이썬 기초