Computer Science/자료구조

코딩테스트 기초 배열 Binary Search | 코드없는 프로그래밍

토마토. 2021. 9. 5. 20:19

출처 코드없는 프로그래밍

코딩테스트, 기초, 배열 인터뷰 바이너리 서치 - YouTube

 

array - binary search

배열이 정렬이 되어있는 상태에서 어떤 값을 찾아달라!

 

어떤 배열 [1,3,5,6,7,15,20]에서 15의 인덱스를 찾고자 한다면? 

<내 풀이>

#어떤 배열 [1,3,5,6,7,15,20]에서 15의 인덱스를 찾고자 한다면? 

def solution(s, a):
  index = 0
  search_index = 0
  while True:
    if a == s[search_index]:
      index = search_index
      break
    elif a < s[search_index]:
      search_index //= 2
    else:
      search_index += len(s)
      search_index //= 2    
  return index

s = [1,3,5,6,7,15,20]
print(solution(s,15))

 

 

Binary search를 사용하면 O(logn)의 시간복잡도로 해결할 수 있다.

idea

 

left

right

 

pivot = (L + R) / 2

pivot을 이용해서 left와 right의 위치를 업데이트한다. 

 

찾을 수 없으면 -1 retrun

 

def solution(s, a):
  left = 0
  right = len(s) - 1

  while True:
    pivot = (left + right) // 2 
    #print(pivot)
    if s[pivot] == a:
      return pivot
      break    
    if left > right or right < left:
      return -1
      break
    elif s[pivot] > a:
      right = pivot
    elif s[pivot] < a:
      if left == right - 1:
        left = pivot + 1
      else:
        left = pivot

예제

int search(int [] nums, int target)
{
  int left = 0;
  int right = nums.length - 1;

  while (left <= right)
  {
    int pivot = (left+right) /2
    if (nums[pivot]==target)
    {
      return pivot;
    }
    else if (nums[pivot]<target)
    {
      left = pivot + 1;
    }
    else
    {
      right = pivot - 1;
    }
  }
}

문제 - (1) Binary Search - LeetCode

 

Binary Search - LeetCode

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