728x90
8983번: 사냥꾼
KOI 사냥터에는 N 마리의 동물들이 각각 특정한 위치에 살고 있다. 사냥터에 온 사냥꾼은 일직선 상에 위치한 M 개의 사대(총을 쏘는 장소)에서만 사격이 가능하다. 편의상, 일직선을 x-축이라 가
www.acmicpc.net
🤔 문제분석
이분탐색으로 문제를 해결하는것을 깨닫았으나, 어떻게 조건을 세워야할지 감을 못잡았습니다.
동물을 기준으로 L범위엔에 들어가는 사냥꾼을 찾아내고 L의 범위안에 들어왔을 경우만 카운팅 하면 된다. 범위를 계산하는 방법은 절대값의 수식에서 점화식을 도출 할 수 있다.
아래의 식에서 S와 E 범위안에 들어간다면 동물이 사냥꾼의 L범위안에 들어가게된다.
💻 코드
import sys
input = sys.stdin.readline
M, N, L = map(int, input().split())
attack = list(map(int, input().split()))
animal = list(map(int, input().split()) for _ in range(N))
attack.sort()
ans = 0
for x, y in animal:
if (y>L):
continue
s = x+y-L
e = x-y+L
start, end = 0, M-1
while start <= end:
mid = (start+end)//2
if attack[mid] >= s and attack[mid] <= e:
ans += 1
break
elif attack[mid] < e:
start = mid + 1
else:
end = mid - 1
print(ans)
🎯 피드백 및 개선사항
이번주도 정렬문제를 푸는데 다양한 유형을 익혀서 스킬업이 되는 기분이다. 많은 문제를 풀어보고, 다른 사람들이 어떻게 풀었는지 참고하여 알고리즘을 잘해지고 싶다… 😀
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 13334번 : 철로 (0) | 2024.02.15 |
---|---|
[백준] 13164번 : 행복 유치원 (0) | 2024.02.14 |
[백준] 2170번 : 선 긋기 (0) | 2024.02.13 |
[백준] 2230번 : 수 고르기 (2) | 2024.02.13 |
[백준] 2473번 : 세 용액 (0) | 2024.02.12 |