-
561. Array Partition IProgramming/leetcode 2021. 2. 2. 10:54728x90
주어진 배열에서 최소값들끼리 구해서 최대값을 만드는 문제
쉬움 난이도 문제이고, 문제만 보면 바로 이해가능함
Input: nums = [1,4,3,2]
Output: 4
두 개씩 나올 수 있는 조합을 생각해보면
(1,4),(3,2) => 1+2 = 3
(1,3),(4,2) => 1+2 = 3
(1,2),(3,4) => 1+3 = 4
즉 정렬을 한 뒤에 답을 구하면 제일 큰 수를 알 수 있다.
def arrayPairSum(self, nums: List[int]) -> int: nums.sort() sum = 0 for i in range(0, len(nums), 2): sum += min(nums[i], nums[i+1]) return sum
좀 더 빠르게 푸는 방법은 없을까?
책을 보니 거의 다 이렇게 푸는데 min을 이용하지 않아도 되었었다,
정렬을 하면 짝수번째가 항상 작은 수 일테니까 짝수번째만 더하는 경우도 있다.
def arrayPairSum(self, nums): sum = 0 nums.sort() for i, value in enumerate(nums): if i % 2 == 0: sum += value return sum
이렇게 풀었지만 더 간단한 방법이 있었다. 정말 파이썬스러운 건데
return sum(sorted(nums)[::2])
한줄이면 끝난다. sorted로 nums를 sort한 새로운 객체를 받고 그 객체를 list slicing 기법으로 자른다. 그리고 sum을 한다...
아직도 난 멀었다.
'Programming > leetcode' 카테고리의 다른 글
234. Palindrome Linked List (0) 2021.02.04 121. Best Time to Buy and Sell Stock (0) 2021.02.02 191. Number of 1 Bits (0) 2021.02.01 15. 3Sum (0) 2021.02.01 42. Trapping Rain Water (0) 2021.02.01