프로그래밍 공방

Lower / Upper Bound : 하한 / 상한 알고리즘 본문

개발/알고리즘

Lower / Upper Bound : 하한 / 상한 알고리즘

hyosupsong 2020. 12. 5. 19:48

Lower Bound : 찾는 값과 같거나 큰 값이 처음으로 나타나는 위치 (이상)

Upper Bound : 찾는 값 보다 큰 값이 처음으로 나오는 위치 (초과)

[1, 2, 5, 7, 8, 9, 11, 11, 11, 14] 인 배열에서 11의 Lower Bound와 Upper Bound의 과정은 아래와 같다.

Lower Bound Upper Bound
 

Lower Bound / Upper Bound 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static int lowerBound(int[] arr, int value) {
    int s = 0, m, e = arr.length-1;
    while(s<e) {
        m = (s+e)/2;
        if(arr[m]<value) s = m+1;
        else e = m;
    }
    return e;
}
 
public static int upperBound(int[] arr, int value) {
    int s = 0, m, e = arr.length-1;
    while(s<e) {
        m = (s+e)/2;
        if(arr[m]<=value) s = m+1;
        else e = m;
    }
    return e;
}
cs