문제 링크
https://www.acmicpc.net/problem/8983
코드
from bisect import bisect_left
input = __import__('sys').stdin.readline
m,n,l = map(int,input().split())
people = sorted(list(map(int,input().split())))
cnt = 0
for _ in range(n):
x,y = map(int,input().split())
if y>l:continue
nx = bisect_left(people,x)
for idx in (nx,nx-1):
if 0<=idx<m:
if abs(people[idx]-x)+y<=l:
cnt+=1
break
print(cnt)
문제 풀이
처음에 사냥꾼의 입장에서 생각했을 때는 헛갈렸는데, 동물의 입장에서 생각하면 쉽게 접근할 수 있다.
동물의 위치에서 가장 가까운 사대의 위치가 사정거리 안이라면 count를 해준다.
가장 가까운 사대의 위치가 사정거리를 벗어나면 어떠한 사대에서도 그 동물을 잡을 수 없다.
y의 거리가 l(사정거리)보다 크면 애초에 사정거리에서 벗어나 잡을 수 없으므로 조건문을 걸어준다.
bisect_left를 이용하여 동물과 가장 가까운 사대의 위치를 찾는다.
'Koala - 11기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 2075 N번째 큰 수 (0) | 2023.08.11 |
---|---|
[백준/python] 17779 게리맨더링 2 (0) | 2023.08.10 |
[백준/C++] 15724번 주지수 (0) | 2023.08.06 |
[백준/C++] 6236번 : 용돈관리 (0) | 2023.08.06 |
[백준/python] 1920번 수 찾기 (0) | 2023.08.06 |