728x90
▼ 문제 바로가기 (링크) ▼
https://leetcode.com/problems/array-partition/
짝수 개의 원소를 가지는 배열 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
반응형
'코딩 테스트 > leetCode' 카테고리의 다른 글
[leetCode] 1967. Number of Strings That Appear as Substrings in Word (Python) (0) | 2022.10.29 |
---|---|
[leetCode] 2427. Number of Common Factors (Python) (0) | 2022.10.28 |
[leetCode] 1827. Minimum Operations to Make the Array Increasing (Python) (0) | 2022.10.25 |
[leetCode] 1323. Maximum 69 Number (Python) (0) | 2022.10.25 |
[leetCode] 1662. Check If Two String Arrays are Equivalent (Python) (0) | 2022.10.25 |