문제
문제에서는 길이가 2n인 정수 리스트를 입력받고, 정수를 n쌍으로 묶은 후 각각의 쌍의 최소값을 합한 결과가 최대가 되도록 하여 반환할 것을 요구하고 있다. 내용을 이해하는데 약 30분 정도 소요되었으며, 생각보다 간단하게 해결할 수 있었다. 길이가 6인 정수 리스트를 입력 받는 경우 n은 3이 되고, 리스트를 3조각으로 나누고, 나누어진 조각의 최소값들을 모두 더했을때 가장 큰 값이 되어야 하는 것이다.
풀이
입력받는 리스트를 오름차순으로 정렬하고, 합계를 0으로 초기화한다.
nums.sort()
sum = 0
입력받은 리스트를 반복하면서 짝수(0, 2, ..., 2n)
번째 인덱스에 해당하는 값을 1
의 합계에 더하고, 반복이 종료되면 합계를 반환한다.
for i in range(0, len(nums), 2):
sum += nums[i]
return sum
추가적으로 슬라이싱을 사용하면 아래 코드와 같이 한 줄로 문제를 해결할 수 있다.
return sum(nums.sorted()[::2])
전체 코드
from typing import List
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
nums.sort()
sum = 0
for i in range(0, len(nums), 2):
sum += nums[i]
return sum
'Algorithm > LeetCode' 카테고리의 다른 글
LeetCode #017 - Letter Combinations of a Phone Number(전화번호 문자 조합) 풀이(2가지 방식) (0) | 2022.03.18 |
---|---|
LeetCode #015 - 3Sum(세 수의 합) 풀이 (0) | 2022.03.16 |
LeetCode #409 - Longest Palindrome(가장 긴 팰린드롬) 풀이 (0) | 2022.03.16 |
LeetCode #622 - Design Circular Queue(원형 큐 디자인) 풀이 (0) | 2022.03.16 |
LeetCode #232 - Implement Queue using Stacks(스택을 이용한 큐 구현) 풀이 (0) | 2022.03.16 |