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])
'Algorithm' 카테고리의 다른 글
[파이썬] 프로그래머스 42840(모의고사) (0) | 2022.01.19 |
---|---|
백준 알고리즘 파이썬(Python) 1009번 분산처리 (0) | 2022.01.05 |
리트코드(LeetCode) 238번 자신을 제외한 배열의 곱(Product of Array Except Self) (3) | 2021.09.27 |
백준 알고리즘 파이썬(Python) 1940번 주몽 (0) | 2021.09.25 |
리트코드(LeetCode) 15번 세 수의 합(3 Sum) (0) | 2021.09.25 |