본문 바로가기
오래된 글

C++ Lower Bound-STL 사용하는 방법

by pagehit 2019. 4. 23.
반응형

C++ STL Lower Bound 사용하기

lower_bound( begin(), end(), value)

[ begin(), end() ) 범위 중에서 value 값이 나타나는 하한을 반환한다.
만약 value가 없다면, value보다 큰 값중에서 가장 작은 값을 반환한다.

즉, value 와 같거나 큰 값이 처음 나타나는 위치를 반복자로 반환한다.


예제 1

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{

    vector<int> v; // vector

    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(22);

    //sort(v.begin(), v.end());

    vector<int>::iterator iter = lower_bound(v.begin(), v.end(), 22); // iterator

    cout << v[iter - v.begin()] << endl;
    cout << v[3] << endl;

    return 0;
}

위의 예제 코드의 출력 결과는 아래와 같다

30
22

sort() 함수를 이용해 정렬을 한 다음에 수행하면 아래와 같이 출력된다.

22
30

예제 2

https://www.hackerrank.com/challenges/cpp-lower-bound/problem

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */

    int m, num;
    cin >> m;
    vector<int> v;

    for (int i = 0; i < m; i++) {
      cin >> num;
      v.push_back(num);
    }

    int n, val;
    cin >> n;

    for (int i = 0; i < n; i++) {
      cin >> val;
      vector<int>::iterator low = lower_bound(v.begin(), v.end(), val);
      if (v[low - v.begin()] == val)
        cout << "Yes " << (low - v.begin() + 1) << endl;
      else
        cout << "No " << (low - v.begin() + 1) << endl;
    }

    return 0;
}

참고

2019/04/23 - [C++] - C++ Lower Bound-STL 사용하는 방법

2019/04/23 - [C++] - C++ 반복자란 무엇인가?

2019/04/20 - [C++] - C++ 벡터 특정 원소 지우는 방법 vector.erase()

2019/04/20 - [C++] - C++ vector를 이용해 정렬하는 방법

2019/04/19 - [C++] - C++ 벡터를 이용해서 길이가 다양한 이차원 배열 구현하기

2019/04/04 - [C++] - C++ | #include <bits/stdc++.h> 헤더파일이란 무엇인가?

2019/04/02 - [C++] - C++ 강의 | 조건문 if와 if - else 문 그리고 if - else if -else 문

2019/04/02 - [C] - C/C++ printf 함수에서 실수 소수점 자리와 너비를 지정하는 방법 | 숫자 정렬해서 출력하기, 소수점 아래 자리수 지정하기

2019/04/01 - [C++] - C++ 강의 | 기본 데이터 타입과 형식지정자 그리고 C++의 출력과 입력 scanf와 printf

반응형

댓글