[프로그래머스/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변수에 누적해준다.
'코딩테스트 > 연습문제' 카테고리의 다른 글
[프로그래머스/Lv2] 피보나치 수 (0) | 2022.10.13 |
---|---|
[프로그래머스/Lv2] 숫자의 표현 (0) | 2022.10.12 |
[프로그래머스/Lv2] 올바른 괄호 (0) | 2022.10.12 |
[프로그래머스/Lv2] JadenCase 문자열 만들기 (1) | 2022.10.07 |
[프로그래머스/Lv2] 최댓값과 최솟값 (0) | 2022.10.07 |