최솟값 만들기
풀이
처음엔 어떻게 하지 인덱스를 다 돌리면서 확인을 해야하는건가 아니면 완전탐색을 이용해야하는 건가 그런 생각을 하다가, 수학적 접근을 했다.
최솟값을 만들어야 하는데 최댓값이 나오는 제일 먼저는 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))])
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv1 NULL 처리하기 (MySQL) (0) | 2024.02.02 |
---|---|
프로그래머스 Lv1 이름이 있는 동물의 아이디 (MySQL) (0) | 2024.02.02 |
프로그래머스 Lv2 숫자 변환하기 (python) (1) | 2024.02.01 |
프로그래머스 Lv2 이진 변환 반복하기 (python) (0) | 2024.02.01 |
프로그래머스 Lv1 [PCCE 기출문제] 10번 / 데이터 분석 (python) (0) | 2024.02.01 |