코딩가딩가

[JAVA]BOJ 7795, 먹을 것인가 먹힐 것인가

Noooodle 2024. 8. 17. 23:04

이진탐색을 이용해 주어진 값보다 작은 범위를 찾아서 합했다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class BOJ7795 {
    public static int countBigger(int[] arrA, int[] arrB, int N, int M){
        int i, low, high, cnt = 0, mid = 0;

        for(i=0;i<N;i++){
            low = 0;
            high = arrB.length - 1;

            while(low <= high){
                mid = (low + high) / 2;

                if(arrB[mid] < arrA[i])
                    low = mid + 1;
                else
                    high = mid - 1;
            }
            cnt += low;
        }
        return cnt;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int i, j, T, N, M;
        StringTokenizer st;
        int[] arrA;
        int[] arrB;

        T = Integer.parseInt(br.readLine());

        for(i=0;i<T;i++){
            st = new StringTokenizer(br.readLine());
            N = Integer.parseInt(st.nextToken());
            M = Integer.parseInt(st.nextToken());

            arrA = new int[N];
            arrB = new int[M];

            st = new StringTokenizer(br.readLine());
            for(j=0;j<N;j++)
                arrA[j] = Integer.parseInt(st.nextToken());

            st = new StringTokenizer(br.readLine());
            for(j=0;j<M;j++)
                arrB[j] = Integer.parseInt(st.nextToken());

            Arrays.sort(arrA);
            Arrays.sort(arrB);

            System.out.println(countBigger(arrA, arrB, N, M));
        }
    }
}

'코딩가딩가' 카테고리의 다른 글

[JAVA]BOJ 2161, 카드1  (0) 2024.08.18
[JAVA]BOJ 15961, 회전 초밥  (0) 2024.08.18
[JAVA]BOJ 2503, 숫자 야구  (0) 2024.08.11
[JAVA]BOJ 1475, 방 번호  (0) 2024.08.09
[JAVA]BOJ 1406, 에디터  (0) 2024.08.09