본문 바로가기
  • Adillete
【스터디노트】/▶알고리즘문제풀기

[704BinarySearch]

by 아딜렛 2025. 4. 15.

출처:

https://leetcode.com/problems/binary-search/description/

 

수도코드

function binarySearch(nums, target):
    left = 0
    right = nums.length - 1
    
    while left <= right:
        mid = left + (right - left) / 2
        
        if nums[mid] == target:
            return mid
        else if nums[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    
    return -1

문제 & 해결

ⓐ 중간값 계산을 어떻게 하는가? 

left + (right - left) /2를 왜 이렇게 하지?

큰 정수를 다룰때 일반적인 중간값 계산

left + right 가 정수의 최대값을 초과할수 있기 때문에 오버플로우 방지용으로 left + (right - left) /2 이렇게 쓴다.

 

ⓑ 등호가 left랑 right 비교할때 필요한가?

left< right 조건을 사용했을시 배열에 요소 하나만 있을때 그 요소를 확인안할수 있어서 등호가 필요하다.

 

ⓒ중간 값과 타깃 비교하기

[1, 3, 5, 7, 9] 타깃 7일때

nums[mid] =5 이고 타깃이 중간값보다 크다.

왼쪽 포인터를 mid+1로 이동하면 검색범위 [7,9] 으로 변경된다. 오른쪽 절반만 계속 검사하게 된다.

타깃이 중간값보다 작으면 오른쪽 포인터를 중간값 -1으로 이동해서 왼쪽 절반을 계속 검색할수 있

'【스터디노트】 > ▶알고리즘문제풀기' 카테고리의 다른 글

[Valid Anagram]  (0) 2025.04.14
[Invert Binary Tree]  (0) 2025.04.12
ValidPalindrome  (0) 2025.04.10
[시간 복잡도]  (0) 2025.04.10
[Best Time to Buy and Sell Stock]  (0) 2025.03.29