ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 561. Array Partition I
    Programming/leetcode 2021. 2. 2. 10:54
    728x90

    주어진 배열에서 최소값들끼리 구해서 최대값을 만드는 문제

     

    쉬움 난이도 문제이고, 문제만 보면 바로 이해가능함

     

    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
Designed by Tistory.