반응형
* leetcode 561. Array Partition 1
Q. n개의 페어를 이용한 min(a, b)의 합으로 만들 수 있는 가장 큰 수를 출력하라.
# 입력
[1, 4, 3, 2]
# 출력
[4]
# 설명
n은 2가 되면, 최대 값은 4이다.
min(1, 2) + min(3, 4) = 4
풀이 1. 오름차순 풀이
최대 min()을 만들기 위해서 내림차순으로 배열을 만들면 항상 최대 min() 페어를 만들 수 있다는 점을 활용한다. 이때, 문제에서 배열 입력값은 2n개일 것이기 때문에 오름차순으로도 같은 결과가 나온다.
def arrayPairSum(nums: List[int]) -> int:
sum = 0
pair = []
nums.sort()
for n in nums:
pair.append(n)
if len(pair) == 2:
sum += min(pair)
pair = []
return sum
풀이 2. 짝수 번째 값 계산
위와 같은 논리로 일일이 min()값을 구하지 않아도 짝수 번째 값(index 0부터 시작하므로)을 더하면 같은 결과를 얻을 수 있다.
def arrayPair(nums: List[int]) -> int:
sum = 0
nums.sort()
for i, n in enumerate(nums):
if i % 2 == 0:
sum += n
return sum
풀이 3. 파이썬 다운 방식
슬라이싱을 활용하면 파이썬다운 1줄짜리 코드로 해결 가능하다.
def arrayPair(nums: List[int]) -> int:
return sum(sorted(nums[::2]))
반응형
'프로그래밍 > [ Python ]' 카테고리의 다른 글
[배열] 주식을 사고팔기 가장 좋은 시점 (0) | 2021.01.17 |
---|---|
[배열] 자신을 제외한 배열의 곱 (0) | 2021.01.17 |
[배열] 새 수의 합 (0) | 2021.01.17 |
[배열] 빗물 트래핑 (0) | 2021.01.13 |
[배열] 두 수의 합 (0) | 2021.01.12 |