이 문제는 여러가지의 풀이를 생각해낼 수 있었지만 우선 내가 생각해낸 가장 직관적인 풀이만 소개하도록 하겠다.
def solution(A,B):
answer = 0
A.sort()
B.sort()
for i in range(len(A)):
answer += A[0]*B[-1]
del A[0]
del B[-1]
return answer
매우 간단하다. 곱의 합들이 최솟값이 되려면 A의 가장 큰 값 또는 작은 값을 B의 가장 작은 값 또는 큰 값에 각각 곱해주고 더해주면 된다. 이를 시간 초과가 뜨지 않게 하기 위해서 먼저 A, B를 sort()
를 통해 순서대로 정렬 후, 작은 값과 큰 값을 곱해주는 방식으로 문제를 풀었다.
다른 사람의 풀이
다음은 프로그래머스에서 가장 많은 좋아요를 받은 풀이이다
def solution(A,B):
return sum(a*b for a, b in zip(sorted(A), sorted(B, reverse = True)))
매우 간단하게 zip
함수와 sorted()
함수를 이용하여 푼 모습이다.
'알고리즘 테스트 > 프로그래머스 문제풀이 및 해설' 카테고리의 다른 글
<프로그래머스 문제풀이: [연습문제] N개의 최소공배수> Level 2 - 파이썬 (0) | 2020.12.18 |
---|---|
<프로그래머스 문제풀이: 소수 만들기> Level 2 - 파이썬 (0) | 2020.12.17 |
<프로그래머스 문제풀이: 올바른 괄호> Level 2 - 파이썬 (0) | 2020.12.14 |
<프로그래머스 문제풀이: [해시] 전화번호 목록> Level 2 - 파이썬 (0) | 2020.12.13 |
<프로그래머스 문제풀이: [정렬] H-Index> Level 2 - 파이썬 (0) | 2020.12.12 |