Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/백준oj

    [백준OJ] 8983번 사냥꾼

    2021. 3. 27.

    by. Hyeon-Uk

    반응형

    www.acmicpc.net/problem/8983

     

    8983번: 사냥꾼

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

    www.acmicpc.net


     

    -풀이-

    1. 사대들을 입력받고 정렬을 해준다.

    2. 입력받는 동물의 x,y좌표를 입력받은 뒤, 이 동물의 x좌표와 같거나, 같지않다면 x보다 큰 값중 가장 작은 값의 인덱스를 구해준다.(lower_bound) 

    3. 해당 사대와의 거리를 구해주어 l보다 작다면 cnt를 1 더해준다.

    4. 3번이 안되는 경우중, 3번의 인덱스보다 1작은 위치에 있는 사대와도 비교를 해준다.

     

    4번이 왜 그러냐면, lower_bound를 통해 얻은 사대를 b사대라고 하면, (b-1).x<= x <= (b.x) 가 되기때문에, 양 사이드를 모두 비교해 주는 것이다.

     

    -시간 복잡도- 

    처음 사대를 입력받고, 정렬하는데 O(MlogM)의 시간이 걸린다.

    아래 로직을 구하는것은 M에대한 lower_bound를 N번 수행하므로 O(NlogM)이 된다.

    M과 N의 최댓값이 똑같으므로 수행시간은 O(NlogN)이 된다.

     

    -코드-

     

    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<cmath>
    using namespace std;
    
    vector<long long> M;
    
    int main() {
    	ios_base::sync_with_stdio(0);
    	cin.tie(0);
    	long long n, m, l, cnt = 0;
    	cin >> m >> n >> l;
    	for (long long i = 0; i < m; i++) {
    		long long data;
    		cin >> data;
    		M.push_back(data);
    	}
    	sort(M.begin(), M.end());
    	for (long long i = 0; i < n; i++) {
    		long long x, y;
    		cin >> x >> y;
    
    		long long ind = lower_bound(M.begin(), M.end(), x) - M.begin();
    		if (abs(M[ind] - x) + y <= l) cnt++;
    		else if (ind - 1 >= 0 && abs(M[ind - 1] - x) + y <= l) cnt++;
    	}
    	cout << cnt;
    }
    

     

    반응형
    저작자표시 (새창열림)

    '문제풀이 > 백준oj' 카테고리의 다른 글

    [백준OJ] 14500번 테트로미노  (0) 2021.03.29
    [백준OJ] 좌표 압축  (0) 2021.03.28
    [백준OJ] 8012번 한동이는 영업사원!  (0) 2021.03.24
    [백준OJ] 14002번 가장 긴 증가하는 부분 수열 4 , 14003번 가장 긴 증가하는 부분 수열 5  (0) 2021.03.22
    [백준OJ] 1939번 중량제한  (0) 2021.03.17

    댓글

    관련글

    • [백준OJ] 14500번 테트로미노 2021.03.29
    • [백준OJ] 좌표 압축 2021.03.28
    • [백준OJ] 8012번 한동이는 영업사원! 2021.03.24
    • [백준OJ] 14002번 가장 긴 증가하는 부분 수열 4 , 14003번 가장 긴 증가하는 부분 수열 5 2021.03.22
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바