최대 1 분 소요

사용 언어: Python3


문제

스크린샷 2022-11-14 오후 2 11 50

처음에는 배열 A의 i 번째 원소와 배열 B의 i 번째 원소의 곱의 합으르 리턴하는 문제인줄 알았으나 그게 아니었다..

두 배열의 원소들의 곱의 합은 맞지만, 인덱스가 달라도 상관 없다.
(하지만 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없다.)

곱의 합의 최솟값을 리턴하는 문제였다.

풀이

내 풀이

import java.util.*;

def solution(A,B):
    answer = 0
    
    A.sort()
    B.sort(reverse=True)

    sum = 0
    for i in range(0,len(A)):
        sum += A[i] * B[i]
    return sum

다른 사람의 풀이

def solution(A,B):
    return sum(a * b for a, b in zip(sorted(A), sorted(B, reverse = True)))

zip() 함수를 쓰면 정말 간단하게 해결할 수 있다..

참고

zip 기본 문법

이 글을 참고했다.

zip() 함수는 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 터플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환합니다.

>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for pair in zip(numbers, letters):
...     print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기