728x90


📌  첫 번째 풀이

크게 어렵지 않은 문제이다.

우선 규칙을 확인해야 하는데 주어지는 수는 무조건 짝수이고 리스트를 오름차순으로 정렬한 뒤 2개씩 묶으면 왼쪽에 있는 숫자의 합을 구하면 된다.

예를 들어 [6, 2, 6, 5, 1, 2] 라면

정렬을 하면 [1, 2, 2, 5, 6, 6] 이 되고 이를 2개씩 묶으면 (1, 2), (2, 5), (6, 6) 이 되어 1+2+6 = 9 가 배열 파티션의 최댓값이 되는 것이다.

 

 

이를 위해 for 문의 range(x, y, z) 의 세 번째 파라미터 즉 z는 증분을 지정하는 파라미터라는 성질을 이용해 풀었다.

nums를 정렬 한 뒤 홀 수 번째 있는 숫자들만 result에 담은 뒤 sum(result)를 해준다.

 

 

풀이 코드

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        nums.sort()
        result = []
        for i in range(0, len(nums), 2):
            result.append(nums[i])
        return sum(result)

 

 

 

 

 

📌  두 번째 풀이

더 간단한 코드를 보게 되어 리뷰한다.

슬라이싱을 이용한 풀이인데 무려 한줄로 끝내는 풀이이다.

슬라이싱 구문[::2] 는 2칸씩 건너뛰는 구문이므로 인덱스가 0, 2, 4 .... 를 계산하게 된다

 

 

풀이 코드

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

 

 

 

 

 

 

 

 

 

 

 

복사했습니다!