본문 바로가기

Algorithm/LeetCode

LeetCode #561 - Array Partition I(배열 파티션 1) 풀이

문제

문제에서는 길이가 2n인 정수 리스트를 입력받고, 정수를 n쌍으로 묶은 후 각각의 쌍의 최소값을 합한 결과가 최대가 되도록 하여 반환할 것을 요구하고 있다. 내용을 이해하는데 약 30분 정도 소요되었으며, 생각보다 간단하게 해결할 수 있었다. 길이가 6인 정수 리스트를 입력 받는 경우 n은 3이 되고, 리스트를 3조각으로 나누고, 나누어진 조각의 최소값들을 모두 더했을때 가장 큰 값이 되어야 하는 것이다.

풀이

입력받는 리스트를 오름차순으로 정렬하고, 합계를 0으로 초기화한다.

nums.sort()
sum = 0

입력받은 리스트를 반복하면서 짝수(0, 2, ..., 2n) 번째 인덱스에 해당하는 값을 1의 합계에 더하고, 반복이 종료되면 합계를 반환한다.

for i in range(0, len(nums), 2):
    sum += nums[i]

return sum

추가적으로 슬라이싱을 사용하면 아래 코드와 같이 한 줄로 문제를 해결할 수 있다.

return sum(nums.sorted()[::2])

전체 코드

from typing import List


class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        nums.sort()
        sum = 0

        for i in range(0, len(nums), 2):
            sum += nums[i]

        return sum