코딩 테스트 (Python)/리트코드

[리트코드] 167. 두 수의 합 2 (Python)

hihyuk 2024. 1. 19. 14:40
 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제

정렬된 리스트에서 두 수의 합이 target값이 되는 인덱스 반환하기

과정

  • 이진탐색을 이용하여 풀어준다.

 

입력

numbers = [2,7,11,15], target = 9

출력

[1,2]

 

풀이

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        start, end = 0, len(numbers)-1
        while start <= end:
            if numbers[start] + numbers[end] < target:
                start += 1
            elif numbers[start] + numbers[end] > target:
                end -= 1
            else:
                return [start+1, end+1]

 

한 줄 씩 해석해보기

start, end = 0, len(numbers)-1
  • 0과 마지막 인덱스 까지 투포인터 생성
while start <= end:
    if numbers[start] + numbers[end] < target:
        start += 1
    elif numbers[start] + numbers[end] > target:
        end -= 1
    else:
        return [start+1, end+1]
  • start와 end가 같아지기 전까지 반복한다.
  • 만약 start인덱스와 end 인덱스의 값의 합이 target보다 작다면 start+=1
  • target보다 크다면 end-=1
  • 그게 아니라면 target과 값이 같은것이므로 +1을 해준 후 출력한다.