
이진탐색을 이용해 주어진 값보다 작은 범위를 찾아서 합했다.
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 |