[프로그래머스/Lv2] 최솟값 만들기

2022. 10. 11. 09:20

문제

길이가 같은 배열 A, B가 있다. 각 배열은 자연수로 이루어져 있다.

배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱한다.

이 과정을 배열의 길이만큼 반복하여, 두 수를 곱한 값을 누적한다.

이 누적값이 최소가 되도록 계산하여 그 값을 반환하는 함수를 만들어야한다.

 

 

제한조건

1. 배열 A, B의 크기 : 1000이하의 자연수

2. 배열 A, B의 원소의 크기 : 1000이하의 자연수

 

 

코드

def solution(A, B):
    sorted_A = sorted(A)
    sorted_B = sorted(B, reverse=True)

    sum = 0
    for a, b in zip(sorted_A, sorted_B):
        sum += a * b

    return sum

 

 

설명

sorted_A = sorted(A)
sorted_B = sorted(B, reverse=True)

배열 A와 B를 정렬해준다.

이 때 A는 오름차순, B는 내림차순으로 정렬한다.

 

정렬해주는 이유는 곱의 최소 누적값을 구현하기 위해서이다.

한 배열에서 가장 작은값과 다른 배열에서 가장 큰 값을 곱해나가면 목표로 하는 최소 누적값이 나올 것이다.

 

sum = 0
for a, b in zip(sorted_A, sorted_B):
	sum += a * b

정렬된 배열들에서 값을 하나씩 꺼내며 작업한다.

두 값을 곱하여 sum변수에 누적해준다.

BELATED ARTICLES

more