반응형
Lower Bound, Upper Bound 특징
- Lower Bound : 원하는 값 k 이상이 처음 나오는 위치를 찾기
- Upper Bound : 원하는 값 k 초과가 처음 나오는 위치를 찾기
- Binary Search (= 원하는 값 k의 위치 찾기)에서 파생된 index search 알고리즘
- 시간복잡도 : O(logN)
Lower Bound, Upper Bound 과정 이해하기
이 2가지 알고리즘의 결과는 아래 그림처럼 표현할 수 있다.
그렇다면, 위의 결과를 어떻게 구현할 수 있을까? 먼저 Lower Bound 구현 과정을 확인해보자.
[ Lower Bound 과정 ]
1. 배열의 처음과 끝을 각각 s와 e로 설정한다.
2. s와 e의 중간인 mid index를 계산한다.
3 - ①. K <= A[mid] 인경우, e를 mid 위치로 이동한다.
3 - ②. K > A[mid] 인 경우, s를 (mid + 1) 위치로 이동한다.
4. s < e 가 만족하는 동안, 반복한다.
5. s위 위치가 Lower Bound 이다.
Upper Bound 구현은 Lower Bound 과정에서 "=" 만 바꾸면 쉽게 구현할 수 있다.
[ Uppper Bound 과정 ]
1. 배열의 처음과 끝을 각각 s와 e로 설정한다.
2. s와 e의 중간인 mid index를 계산한다.
3 - ①. K < A[mid] 인경우, e를 mid 위치로 이동한다.
3 - ②. K >= A[mid] 인 경우, s를 (mid + 1) 위치로 이동한다.
4. s < e 가 만족하는 동안, 반복한다.
5. s의 위치가 Upper Bound 이다.
Lower Bound 코드
int lowerBound(int k) {
int s = 0, e = N - 1, mid;
while (s < e) {
mid = (s + e) / 2;
if (k <= A[mid]) e = mid;
else s = mid + 1;
}
return s;
}
Upper Bound 코드
int upperBound(int k) {
int s = 0, e = N - 1, mid;
while (s < e) {
mid = (s + e) / 2;
if (k < A[mid]) e = mid;
else s = mid + 1;
}
return s;
}
연습문제 추천
[Pro][삼성] 15942번 : 외계인 침공 - 1
삼성 SWEA 15942 : 외계인 침공 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com [풀이 후기] 난이도 : ★★★☆ (Pro) 문제 종류 : Sort & Binary Sear
dongdoridong.tistory.com
반응형
'자료구조, 알고리즘' 카테고리의 다른 글
[알고리즘][정렬][C/C++] Heap Sort (우선순위 큐) (1) | 2023.01.20 |
---|---|
[알고리즘][정렬][C/C++] Merge Sort (병합정렬) (7) | 2023.01.18 |
댓글