코딩 테스트/leetCode

[leetCode] 561. Array Partition (Python)

우주바다 2022. 10. 26. 20:32
728x90

▼ 문제 바로가기 (링크) 

https://leetcode.com/problems/array-partition/

 

Array Partition - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


짝수 개의 원소를 가지는 배열 nums가 주어진다.

2개씩 조합했을 때(combination)

각 원소 중 더 작은 값만 골라 모두 더했을 때 최대값을 구하는 문제.

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        answer = 0
        nums.sort()
        for i in nums[0::2]: 
            answer += i
        return answer

 

우선 대소 비교를 해야하니 sort로 오름차순 정렬했다. 

 

1 2 3 4 5 6  을 예로 들면

가장 큰 수를 남기려면 하나의 쌍 내에서 더 작아야하므로

5,6 이 묶여야 5가 남을 수 있다. 여기서 6의 값은 버려진다.

 

따라서 리스트 슬라이싱으로 건너 뛰어가며 더한 후 반환했다.

시작과 끝 인덱스 필수값 뒤로 적은 숫자 만큼 간격을 가지는데

1은 바로 다음 수로 디폴트값이고 2를 적으면 하나씩 건너뛸 수 있다.

참고 : https://dojang.io/mod/page/view.php?id=2208 

 

 

nums[::2] 로 홀수번 째 인덱스만 남기고 for문을 돌면서

순서대로 모두 더해서 반환한 것.


버릇처럼 필요도 없는 묶음들을 리스트에 저장하고.. itertools 조합에 이중 for문에

복잡하게 풀이할 뻔 했는데 생각이 들자마자 아 이거 아니지! 하고

답만 찾아내려면 뭐가 중요한 지 부터 생각했고

바로 든 생각이 sort. 이후로는 쉽게 풀렸다.  단순한 식이지만 직접 만들어서 뿌듯하다.

수학에 너무 겁먹지 말자!

728x90
반응형