[Leetcode/Easy] 배열 파티션 1 (561. Array Partition 1, Swift)

2024. 7. 5. 13:26Algorithm

https://leetcode.com/problems/array-partition/description/

 

🤔 문제 설명

2n개의 정수 배열이 주어지면, n개의 묶음 min(a, b)의 합으로 만들 수 있는 가장 큰 수를 출력하세요.

nums = [1,4,3,2]
// 4 : min(1, 2) + min(3, 4) = 1 + 3 = 4

 

💡 풀이

# 첫 번째 생각

정말 단순하게 생각해보면, 입력받은 nums 배열을 정렬시킨 후 앞에서부터 두 쌍씩 페어를 시켜준 다음, 각 묶음에서 최소값들의 합을 구하면 올바른 답이 도출될 것이다.


# 두 번째 생각

하지만 생각해보면, 결국 min 함수를 적용하지 않고도 리스트를 정렬시켰다면 인덱스 값에 의해 값을 도출할 수 있다.
nums[0], nums[2], nums[4]....값들이 결국은 정렬을 시킨 후의 값이기 때문에, 이 값들이 min값과 같기 때문에 짝수 인덱스 값의 합을 구하면 되겠다.

 

🧑🏻‍💻 코드 (Swift ver.)

💡 Runtime : 108ms (Beats 75.56%), Memory : 16.49MB (Beats 15.48%)
class Solution {
    func arrayPairSum(_ nums: [Int]) -> Int {
        var sum = 0
        let sortedNums = nums.sorted()

        for i in 0..<sortedNums.count {
            if (i%2 == 0) { sum += sortedNums[i] }
        }
        
        return sum
    }
}