210B 2022. 9. 15. 21:02
561. Array Partition
Easy
파이썬 알고리즘 인터뷰 190p
Given an integer array nums of 2n integers, group these integers into n pairs (a1, b1), (a2, b2), ..., (an, bn) such that the sum of min(ai, bi) for all i is maximized. Return the maximized sum.

♬idea

  • min 의 합이 커지려면 작은 수는 작은 수끼리, 큰 수는 큰 수 끼리 묶여야 낭비하는 큰 수가 없을 것
  • sort 함수로 정렬, for 문과 append 함수로 페어링 

 

1. 배열 오름차순 정렬 후 페어링, min 합 구하기

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        sum = 0
        pair = []
        
        #배열 오름차순 정렬 후 페어링
        nums.sort()
        
        for i in nums:
            pair.append(i)
            if len(pair) == 2:
                sum += min(pair)
                pair = []
                
        return sum

2. 배열 오름차순 정렬 후 짝수번째 원소들의 합 구하기

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        
        #배열 오름차순 정렬 후 짝수번째 원소들의 합 구하기
        nums.sort()
        
        sum(nums[::2])
                
        return sum

따란~ 오류 남

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

교재 솔루션 코드

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        
        #배열 오름차순 정렬 후 짝수번째 원소들의 합 구하기
        nums.sort()
        
        result = sum(nums[::2])
                
        return result

함수 sum을 쓰면서 처음에 선언했던 변수 sum과 혼동해서 쓰는 바람에 오류가 났다는 것을 알 수 있었다. 변수 result를 새로 선언해서 해결함.