LeetCode/NeetCode

[Two Pointers] 167. Two Sum II - Input Array Is Sorted

hyunkookim 2024. 11. 29. 15:30

167. Two Sum II - Input Array Is Sorted

 

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        l, r = 0, len(numbers)-1
        res = []
        while l < r:
            if numbers[l]+numbers[r] < target:
                l +=1
            elif numbers[l]+numbers[r] > target:
                r -=1
            else: # numbers[l]+numbers[r] == target
                res.append(l+1)
                res.append(r+1)
                break
        return res

 

 

https://youtu.be/cQ1Oz4ckceM?si=cQZ68c1mfJdS072N

 

최종 코드

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        l, r = 0, len(numbers) - 1  # 왼쪽 포인터 l은 0, 오른쪽 포인터 r은 배열 마지막 인덱스로 초기화

        while l < r:  # 두 포인터가 겹치지 않는 동안 반복
            curSum = numbers[l] + numbers[r]  # 현재 포인터가 가리키는 두 수의 합 계산

            if curSum > target:  # 합이 타겟보다 크면
                r -= 1  # 오른쪽 값을 줄이기 위해 포인터를 왼쪽으로 이동
            elif curSum < target:  # 합이 타겟보다 작으면
                l += 1  # 왼쪽 값을 키우기 위해 포인터를 오른쪽으로 이동
            else:  # 합이 타겟과 정확히 일치하면
                return [l + 1, r + 1]  # 문제 조건: 1-based index로 결과 반환

        return []  # 문제에서 항상 답이 존재한다고 가정하지만, 안전을 위해 빈 리스트 반환