Algorithms/LeetCode

[LeetCode] 1679. Max Number of K-Sum Pairs

junhwa100 2024. 11. 3. 21:52

1. 문제 이해

정수 리스트 nums와 정수 k가 주어진다.

한 번의 작업에서, 리스트에서 합이 k인 두 숫자를 선택하여 리스트에서 제거할 수 있다.

리스트에서 수행할 수 있는 작업의 최대 횟수를 리턴한다.

 

 

2. 풀이 과정

리스트를 오름차순으로 정렬한다.

리스트의 처음과 끝을 가리키는 투 포인터를 만든다.

while 문을 사용해 start < end일 때 반복한다.

현재 start, end에서 합이 k라면 cnt 변수를 1만큼 증가시킨다. start와 end도 각각 1만큼 증가시키고 감소시킨다.

만약 합이 k보다 작다면 start만 1만큼 증가시킨다. k보다 크다면 end만 1만큼 감소시킨다.

 

 

3. 전체 코드

class Solution:
    def maxOperations(self, nums: List[int], k: int) -> int:
        nums.sort()
        start, end = 0, len(nums) - 1
        cnt = 0
        while start < end:
            if nums[start] + nums[end] == k:
                cnt += 1
                start += 1
                end -= 1
            elif nums[start] + nums[end] < k:
                start += 1
            else:
                end -= 1
        
        return cnt

 

 

4. 생각할 점

- 처음에는 합이 k인 경우 리스트에서 실제로 pop()을 통해 요소를 제거했다. 하지만 인덱스가 당겨지는 문제가 있었고 포인터만 옮기면 되므로 실제로 요소를 제거할 필요가 없다.

 

 

5. 출처

- https://leetcode.com/problems/max-number-of-k-sum-pairs/?envType=study-plan-v2&envId=leetcode-75