Binary Search

기술노트

이분 탐색(Binary Search)

> 탐색 범위를 두 부분으로 분할하면서 찾는 방식

처음부터 끝까지 돌면서 탐색하는 것보다 훨Admin (토론)씬 빠른 장점을 지님

* 시간복잡도
전체 탐색 : O(N)
이분 탐색 : O(logN)


진행 순서
  • 우선 정렬을 해야 함
  • left와 right로 mid 값 설정
  • mid와 내가 구하고자 하는 값과 비교
  • 구할 값이 mid보다 높으면 : left = mid+1
 구할 값이 mid보다 낮으면 : right = mid - 1
  • left > right가 될 때까지 계속 반복하기


Code
java
public static int solution(int[] arr, int M) { // arr 배열에서 M을 찾자
	
    Arrays.sort(arr); // 정렬
	
	int start = 0; // 시작
	int end = arr[arr.length-1]; // 끝
	
	while(start <= end) {
		
		int sum = 0;
		int mid = (start+end)/2; // 시작과 끝의 중간값
		
		for (int i = 0; i < arr.length; i++) {
			if(arr[i] > mid)
				sum+=mid;
			else
				sum+=arr[i];
		}
		
		if(sum > M)
			end = mid - 1;
		else
			start = mid + 1;
		
	}
    
	return end;
}