본문 바로가기
알고리즘/BOJ

BOJ 8983 ) 사냥꾼 (C++)

by twinkite 2022. 5. 1.
반응형
 

8983번: 사냥꾼

KOI 사냥터에는 N 마리의 동물들이 각각 특정한 위치에 살고 있다. 사냥터에 온 사냥꾼은 일직선 상에 위치한 M 개의 사대(총을 쏘는 장소)에서만 사격이 가능하다. 편의상, 일직선을 x-축이라 가

www.acmicpc.net

lower_bound를 이용해서 풀었다. lower_bound는 해당 범위에서 key값보다 같거나 큰 값 중 가장 작은 값을 반환한다. 사대를 입력받고 오름차순으로 정렬한 후 동물의 위치(a,b)를 입력받을 때 마다 해당 동물을 잡을 수 있는 사대 위치의 최솟값(a+b-L), 최댓값(L+a-b)을 구한 후 lower_bound를 이용해 사대 배열에서 min 값보다 같거나 큰 값 중 가장 작은 값의 위치를 구한다. 만약 그러한 값이 없다면 end를 반환하므로 조건문에서 해당 경우를 체크해준다.  

#include <iostream>
#include <algorithm>
#include <cstring>
#define ll long long
using namespace std;

int M, N;
ll L;

ll arr[111111];

int main(){
    cin>>M>>N>>L;

    for(int i=0;i<M;i++){
        cin>>arr[i];
    }
    sort(arr, arr+M);
    int x, y, ans=0;
    for(int i=0;i<N;i++){
        cin>>x>>y;
        if(y>L) continue;
        ll min=x+y-L;
        ll max=L+x-y;
        auto temp1 = lower_bound(arr, arr+M, min);

        if(temp1 !=arr+M && *temp1<=max) ans++;
    }
    cout<<ans;
}

예전에 풀어본 유형인데 왜 바로 풀이가 생각이 안나는건지..

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

BOJ 2428 ) 표절 (C++)  (0) 2022.06.09
BOJ 2636 ) 치즈 (C++)  (0) 2022.05.09
BOJ 11652) 카드 (C++)  (0) 2022.03.12
BOJ 12100) 2048(Easy) (C++)  (0) 2021.10.05
BOJ 18808) 스티커 붙이기 (C++)  (0) 2021.10.04