백준 문제 링크
먹을 것인가 먹힐 것인가
- A의 수와 B의 수를 각각 array_N, array_M에 넣어주고 정렬한다.
- 초기값 result = -1 (각 생명체당 몇 마리 먹을 수 있는지),
answer = 0(총 몇마리 먹을 수 있는지)으로 지정한다.- 기본 이분 탐색 코드에서
- array_N의 원소가 array_M[mid]보다 크다면
result = mid, start = mid + 1로 지정한다.- array_N의 원소가 array_M[mid]보다 작거나 같다면
end = mid - 1로 지정한다.- 여기서 result가 의미하는 바는 예를 들어,
원소가 8, array_M = [1,3,6]이 있을 때 result = 2이면
인덱스 2까지 모두 다 먹을 수 있다는 것을 의미한다.
- while문을 탈출하면 answer에 result + 1을 더해준다.
- answer를 출력하면 끝!
T = int(input())
for _ in range(T):
N, M = map(int, input().split())
array_N = list(map(int, input().split()))
array_M = list(map(int, input().split()))
array_N.sort()
array_M.sort()
result = -1
answer = 0
for i in array_N:
start = 0
end = M-1
while start <= end:
mid = (start + end) // 2
if i > array_M[mid]:
result = mid
start = mid + 1
else:
end = mid - 1
answer += result + 1
print(answer)