๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/Note

[C++, ์œ ์šฉํ•œ ๋ฌธ๋ฒ•] upper_bound, lower_bound

by ์•ˆ์ฃผํ˜• 2022. 5. 11.

lower_bound

  • ์šฉ๋„ : ์ฐพ์œผ๋ ค๋Š” key ๊ฐ’๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฐ ์ˆซ์ž๊ฐ€ ๋ฐฐ์—ด ๋ช‡ ๋ฒˆ์งธ์—์„œ ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š”์ง€ ์ฐพ๊ธฐ ์œ„ํ•จ
  • ์‚ฌ์šฉ ์กฐ๊ฑด : ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•  ๋ฐฐ์—ด ํ˜น์€ ๋ฒกํ„ฐ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
  • lower_bound์˜ ๋ฐ˜ํ™˜ํ˜•์€ Iterator ์ด๋ฏ€๋กœ ์‹ค์ œ๋กœ ๋ช‡ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์ธ์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด, lower_bound ๊ฐ’์—์„œ ๋ฐฐ์—ด ์ฒซ ๋ฒˆ์งธ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฐ์—ด์˜ ์ด๋ฆ„์„ ๋นผ ์ค˜์•ผํ•จ.

1. array

#include <iostream>
#include <algorithm>
using namespace std;

int main() {

	int arr[6] = { 1,2,3,4,5,6 };
	cout << "lower_bound(6) : " << lower_bound(arr, arr + 6, 6) - arr;
    
    // ๊ฒฐ๊ณผ -> lower_bound(6) : 5
}

2. vector

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    
    vector<int> arr = { 1,2,3,4,5,6,6,6 };
    cout << "lower_bound(6) : " << lower_bound(arr.begin(), arr.end(), 6) - arr.begin();
    
    // ๊ฒฐ๊ณผ -> lower_bound(6) : 5
    
}

 

upper_bound

  • ์šฉ๋„ : ์ฐพ์œผ๋ ค๋Š” key ๊ฐ’์„ ์ดˆ๊ณผํ•˜๋Š” ์ˆซ์ž๊ฐ€ ๋ฐฐ์—ด ๋ช‡ ๋ฒˆ์งธ์—์„œ ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š”์ง€ ์ฐพ๊ธฐ ์œ„ํ•จ
  • ์‚ฌ์šฉ ์กฐ๊ฑด : ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•  ๋ฐฐ์—ด ํ˜น์€ ๋ฒกํ„ฐ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
#include <iostream>
#include <algorithm>
using namespace std;

int main() {

	vector<int> arr = { 1,2,3,4,5,6 };
	cout << "upper_bound(3) : " << upper_bound(arr.begin(), arr.end(), 3) - arr.begin();

    // ๊ฒฐ๊ณผ -> upper_bound(3) : 3
}

๋Œ“๊ธ€