BOJ - 7795

주의·2024년 1월 26일
0

boj

목록 보기
126/214

백준 문제 링크
먹을 것인가 먹힐 것인가

❓접근법

  1. A의 수와 B의 수를 각각 array_N, array_M에 넣어주고 정렬한다.
  2. 초기값 result = -1 (각 생명체당 몇 마리 먹을 수 있는지),
    answer = 0(총 몇마리 먹을 수 있는지)으로 지정한다.
  3. 기본 이분 탐색 코드에서
  • 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까지 모두 다 먹을 수 있다는 것을 의미한다.
  1. while문을 탈출하면 answer에 result + 1을 더해준다.
  2. 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)

0개의 댓글