본문 바로가기
자바 알고리즘/백준

백준 7795 : 먹을 것인가 먹힐 것인가 (이분탐색)

by hoshi03 2024. 5. 20.

문제

심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을 수 있는 쌍의 개수는 7가지가 있다. 8-3, 8-6, 8-1, 7-3, 7-6, 7-1, 3-1.

두 생명체 A와 B의 크기가 주어졌을 때, A의 크기가 B보다 큰 쌍이 몇 개나 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 A의 수 N과 B의 수 M이 주어진다. 둘째 줄에는 A의 크기가 모두 주어지며, 셋째 줄에는 B의 크기가 모두 주어진다. 크기는 양의 정수이다. (1 ≤ N, M ≤ 20,000) 

출력

각 테스트 케이스마다, A가 B보다 큰 쌍의 개수를 출력한다.

예제 입력 1 복사

2
5 3
8 1 7 3 1
3 6 1
3 4
2 13 7
103 11 290 215

예제 출력 1 복사

7
1

 

• 풀이

 

입력받는 A쌍, B쌍을 오름차순 정렬하고 A쌍에서 고른 원소가 B쌍의 특정 원소보다 크다면 B쌍의 처음부터 해당원소까지는 다 먹을 수 있다

 

이분탐색을 이용해서 A전체  * logN 으로 NlogN으로 풀 수 있었다

 

import java.util.*;
import java.io.*;


class Main
{

    static int binary_search(int target, int[] arr){
        int lt = 0;
        int rt = arr.length-1;
        int res = 0;

        while (lt <= rt){
            int m = (lt + rt) / 2;

            if (arr[m] < target){
                res = Math.max(res, m+1);
                lt = m+1;
            }

            else rt = m-1;
        }

        return res;
    }

    public static void main (String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        int count = in.nextInt();
        while (count-- > 0){
            int res = 0;
            int n = in.nextInt();
            int m = in.nextInt();
            int[] a = new int[n];
            int[] b = new int[m];
            for (int i = 0; i < n; i++) a[i] = in.nextInt();
            for (int i = 0; i < m; i++) b[i] = in.nextInt();
            Arrays.sort(a);
            Arrays.sort(b);
            for (int i = 0; i < n; i++){
                int tmp = a[i];
                res += binary_search(tmp, b);
            }
            System.out.println(res);
        }
    }
}

'자바 알고리즘 > 백준' 카테고리의 다른 글

백준 5430 : AC  (0) 2024.05.30
백준 15825 : Router  (0) 2024.05.22
백준 2503 : 숫자야구  (0) 2024.05.20
백준 1475: 방번호  (0) 2024.05.20
백준 1406 : 에디터 (LinkedList, List Iterator)  (0) 2024.05.19