[C++] 백준 10816 : 숫자 카드 2

#include <iostream>
#include <vector> // vector 사용
#include <algorithm>
using namespace std;

int main(int argc, char **argv){
    int N, M;
    int x;
    scanf("%d",&N);
    vector<int> v(N); // N 크기의 벡터 생성

    for(int i=0; i<N; i++){
        scanf("%d",&v[i]); // 상근이 값 입력받기
    }  
    sort(v.begin(), v.end()); // vector의 시작과 끝으로 정렬

    scanf("%d", &M);
    for(int i=0; i<M; i++){
        scanf("%d", &x);
        auto low = lower_bound(v.begin(), v.end(), x); // auto : 타입 추론, 매개변수에는 사용 불가
        auto up = upper_bound(v.begin(), v.end(), x);
        //upper_bound : binary search로 해당 숫자가 끝나는 위치 반환
        //lower_bound : binary search로 해당 숫자가 시작하는 위치 반환

        printf("%ld ", up - low);
    }
    
    return 0;
}

오늘의 키포인트

  • 처음으로 lower_bound, upper_bound STL과 vector를 사용해보았다. 아직 미숙해서 인터넷을 열심히 찾아보았다. 다음에 보지 않고 풀어보기 필수.

  • vector를 sort 할 때는 시작과 끝을 v.begin(), v.end()를 사용한다.

  • upper_bound : binary search로 해당 숫자가 끝나는 위치 반환 (주어진 값보다 크거나 같으면서 제일 작은 값)
    lower_bound : binary search로 해당 숫자가 시작하는 위치 반환 (주어진 값보다 크면서 제일 작은 값)

  • C++에는 auto라고 타입 추론하는 변수형이있다. 매개변수에는 사용이 불가능하다. 하지만 주소를 저장할때는 참 좋은 것 같다.

좋은 웹페이지 즐겨찾기