Binary Seach - GitDeveloperKim/DreamEach GitHub Wiki

Binary Search

  • Binary Search์—์„œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ while(left<=right)์—์„œ ๋“ฑํ˜ธ๋ฅผ ๊ผญ ๋ถ™์—ฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ˆ ๋ถ™์ด๊ฒŒ ๋˜๋ฉด, ์›์†Œ๊ฐ€ ํ•˜๋‚˜ ๋‚จ์•˜์„ ๋•Œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ๋‚จ์•„์žˆ๋Š” ์›์†Œ๋ฅผ ๋น„๊ตํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ while ๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ๋“ฑํ˜ธ๋ฅผ ๋ถ™์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ๋ถ€๋“ฑํ˜ธ๋ฅผ ๋นผ๋ฉด lower bound๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„๊ฒƒ
  • click

// ์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ binary search
public static int binarySearch (int [] arr, int start, int end, int value) {
        int result = 0;
	int mid = (start+end)/2;
	if (value == arr[mid]) {
		result = arr[mid];
	} else if (value < mid) { 
           	result = binarySearch (arr,start, mid-1,value);
	} else if (value > mid) {
		result = binarySearch (arr,mid+1, end,value);
	} 
	return result;
}

// while ์„ ์ด์šฉํ•œ binary search
private static int binarySearch_while (int s, int e, int target) {
        int index = -1;
        // ๋“ฑํ˜ธ ๊ธฐํ˜ธ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผํ•œ๋‹ค
	while (s <= e) {
		int mid = (s+e)/2;
                // target ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’, dp[mid] ๋ฐฐ์—ด์—์„œ ์ค‘์•™๊ฐ’
                if (target == dp[mid]) {
                    return mid; // ์ฐพ์Œ
		else if (target < dp[mid]) {
		    e = mid;   // ์ขŒ์ธก ํƒ์ƒ‰
		} else if (target > dp[mid]){
		    s = mid+1; // ์šฐ์ธก ํƒ์ƒ‰
		}
	}
	return index;  // ๊ฐ’
}

lower bound


private static int lower_bound (int s, int e, int target) {
	while (s < e) {
		int mid = (s+e)/2;
                // target ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’, dp[mid] ๋ฐฐ์—ด์—์„œ ์ค‘์•™๊ฐ’
		if (target <= dp[mid]) {
			e = mid;
		} else {
			s = mid+1;
		}
	}
	return e;  // end ๋ฆฌํ„ด
}

upper bound


private static int upperBound(List data, int target) {
    int begin = 0;
    int end = data.size()-1;
    
    while(begin < end) {
    	int mid = (begin + end) / 2;
        // ํƒ€๊ฒŸ ๊ฐ’ ๋ณด๋‹ค search ๊ฐ’์ด ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด
        if(data.get(mid) <= target) {
        	begin = mid + 1;
        }
        else {
        	end = mid;
        }
    }
    return end;
}

ํŒŒ๋ผ๋งคํŠธ๋ฆญ ์„œ์น˜

  • ์ตœ์ ํ™” ๋ฌธ์ œ๋ฅผ ๊ฒฐ์ • ๋ฌธ์ œ๋กœ ๋ฐ”๊พธ์–ด ํ‘ธ๋Š”๊ฒƒ
  • ์ตœ์ ํ™” ๋ฌธ์ œ๋ž€ ๋ฌธ์ œ์˜ ์ƒํ™ฉ์„ ๋งŒ์กฑํ•˜๋Š” ํŠน์ • ๋ณ€์ˆ˜์˜ ์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
  • ์˜ˆ) ๋ฒ”์œ„ ๋‚ด์—์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ์œผ๋ผ๋Š” ์ตœ์ ํ™” ๋ฌธ์ œ๋ผ๋ฉด ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ๊ฒฐ์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด์„œ ๋ฒ”์œ„๋ฅผ ์ขํ˜€๊ฐˆ ์ˆ˜ ์žˆ์Œ
  • ๋ฌธ์ œ ํ’€์ด: ๋ฐฑ์ค€2805 ๋‚˜๋ฌด์ž๋ฅด๊ธฐ
โš ๏ธ **GitHub.com Fallback** โš ๏ธ