본문 바로가기
파이썬 알고리즘 코딩

배열 파티션 I 문제

by 볼록티 2021. 4. 11.
728x90
반응형

 

n 개의 페어를 이용한 min(a, b) 합으로 만들 수 있는 가장 큰 수를 출력하라.

 

이 문제는 2 개 이상의 짝수로 주어지는 숫자들을 2 개씩 쌍을 지어서 쌍의 최솟값 즉, min 값을 더해서 결과적으로 가장 최대가 되는 값은 얼마인지를 묻는다.

 

먼저 두 쌍의 min 값을 다 더해서 최대가 되게 하려면, 오름차순으로 정렬해서 앞에서부터 두개씩 쌍을 지어서 min 값을 다 더하면 가장 큰 값을 낼 수 있다는 것을 알 수 있다.

 

    def arrayPairSum(self, nums: List[int]) -> int:
        nums.sort()
        result = 0
        while nums:
            
            one = nums.pop(0)
            two = nums.pop(0)
            result += min(one, two)
        
        return result

 

이미 정렬이 되어 있기 때문에 굳이 min 함수를 사용하지 않아도 오름차순으로 정렬이 되어 있으면, 앞쪽에 있는 값이 최소한 min 값이 되므로 이와 같이 풀어볼 수도 있다.

    def arrayPairSum(self, nums: List[int]) -> int:
        return sum(sorted(nums)[::2])

위의 코드를 보면 인덱스 0 부터 시작해 인덱스가 2,4,6, ... 처럼 두칸씩 불러오므로 min 을 불러오는 것과 같다. 이렇게 파이썬다운 방식으로 슬라이싱을 활용하여 간단하게 풀이가 가능하다.

728x90
반응형

'파이썬 알고리즘 코딩' 카테고리의 다른 글

주식을 사고팔기 가장 좋은 시점 문제  (2) 2021.04.11
자신을 제외한 배열의 곱 문제  (0) 2021.04.11
세 수의 합 문제  (0) 2021.04.04
빗물 트래킹 문제  (0) 2021.04.04
두 수의 합 문제  (0) 2021.04.04

댓글