BOJ 3020 개똥벌레
BOJ 3020
이분탐색 문제로 처음 이 문제를 접하였다.
하지만 계속 고민을 해봐도 이분탐색으로는 생각이 나지 않았다.
스터디원에게 누적합이라는 힌트를 얻고
BOJ 21318
위 문제를 통해 누적합 감을 잡고
다시 개똥벌레를 풀어보았지만,,,,,
모든 높이를 점검해보는 방법(결국에 이방법으로 풀음)밖에
생각이 안나서 구글링을 해보았다...🤓
참고코드
upper_bound / lower_bound를 사용해서 해결했다!!
C++의 이분탐색
c++에서는 이진탐색으로 원소를 탐색하는 lower_bound / upper_bound를 사용한다.
배열 또는 리스트가 정렬되어있어야한다
이 조건이 성립되어야 사용가능하다.
이진탐색을 사용하기 위한 조건과 같다는 점을 알 수 있다.
또한 이진탐색의 원리를 갖고있기 때문에 O(logN) 시간복잡도를 갖습니다.
lower_bound
- 이 함수는 찾고자 하는 key값과 크거나 같은 원소의 위치를 구하는 것 입니다.
- 같은 원소가 여러개 있어도 유일한 해를 찾을 수 있습니다.
- 사용방법
template <class ForwardIterator, class T>
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val);
lower_bound(v.first(), v.end(), 4);
이런식으로 사용합니다.
upper_bound
- key값을 초과하는 가장 첫 번째 원소의 위치를 구하는 것 입니다.
- 같은 원소가 여러개 있어도 유일한 해를 찾을 수 있습니다.
- 사용방법
template <class ForwardIterator, class T>
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val);
upper_bound(v.first(), v.end(), 4);
이런식으로 사용합니다.
Author And Source
이 문제에 관하여(BOJ 3020 개똥벌레), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mar_f/BOJ-3020-개똥벌레저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)