BOJ 3020
이분탐색 문제로 처음 이 문제를 접하였다.
하지만 계속 고민을 해봐도 이분탐색으로는 생각이 나지 않았다.
스터디원에게 누적합이라는 힌트를 얻고
BOJ 21318
위 문제를 통해 누적합 감을 잡고
다시 개똥벌레를 풀어보았지만,,,,,
모든 높이를 점검해보는 방법(결국에 이방법으로 풀음)밖에
생각이 안나서 구글링을 해보았다...🤓
참고코드
upper_bound / lower_bound를 사용해서 해결했다!!
c++에서는 이진탐색으로 원소를 탐색하는 lower_bound / upper_bound를 사용한다.
배열 또는 리스트가 정렬되어있어야한다
이 조건이 성립되어야 사용가능하다.
이진탐색을 사용하기 위한 조건과 같다는 점을 알 수 있다.
또한 이진탐색의 원리를 갖고있기 때문에 O(logN) 시간복잡도를 갖습니다.
template <class ForwardIterator, class T>
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val);
lower_bound(v.first(), v.end(), 4);
이런식으로 사용합니다.
template <class ForwardIterator, class T>
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val);
upper_bound(v.first(), v.end(), 4);
이런식으로 사용합니다.