Algorithm
리트코드(LeetCode) 561번 배열 파티션(Array Partition)
🤖 Play with Android 🤖
2021. 9. 27. 16:07
728x90
📌 첫 번째 풀이
크게 어렵지 않은 문제이다.
우선 규칙을 확인해야 하는데 주어지는 수는 무조건 짝수이고 리스트를 오름차순으로 정렬한 뒤 2개씩 묶으면 왼쪽에 있는 숫자의 합을 구하면 된다.
예를 들어 [6, 2, 6, 5, 1, 2] 라면
정렬을 하면 [1, 2, 2, 5, 6, 6] 이 되고 이를 2개씩 묶으면 (1, 2), (2, 5), (6, 6) 이 되어 1+2+6 = 9 가 배열 파티션의 최댓값이 되는 것이다.
이를 위해 for 문의 range(x, y, z) 의 세 번째 파라미터 즉 z는 증분을 지정하는 파라미터라는 성질을 이용해 풀었다.
nums를 정렬 한 뒤 홀 수 번째 있는 숫자들만 result에 담은 뒤 sum(result)를 해준다.
풀이 코드
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
nums.sort()
result = []
for i in range(0, len(nums), 2):
result.append(nums[i])
return sum(result)
📌 두 번째 풀이
더 간단한 코드를 보게 되어 리뷰한다.
슬라이싱을 이용한 풀이인데 무려 한줄로 끝내는 풀이이다.
슬라이싱 구문[::2] 는 2칸씩 건너뛰는 구문이므로 인덱스가 0, 2, 4 .... 를 계산하게 된다
풀이 코드
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
return sum(sorted(nums)[::2])