https://www.acmicpc.net/problem/7795
import java.io.*;
import java.util.*;
public class Main {
static FastReader scan = new FastReader();
static StringBuilder sb = new StringBuilder();
static int N, M;
static int[] A, B;
static void input() {
N = scan.nextInt();
M = scan.nextInt();
A = new int[N + 1];
B = new int[M + 1];
for (int i = 1; i <= N; i++) {
A[i] = scan.nextInt();
}
for (int i = 1; i <= M; i++) {
B[i] = scan.nextInt();
}
}
static int findAns(int[] A, int L, int R, int X) {
int res = L - 1;
while (L <= R) {
int mid = (L + R) / 2;
if (A[mid] < X) {
res = mid;
L = mid + 1;
} else {
R = mid - 1;
}
}
return res;
}
static void find() {
Arrays.sort(B, 1, M + 1);
int ans = 0;
for (int i = 1; i <= N; i++) {
ans += findAns(B, 1, M, A[i]);
}
System.out.println(ans);
}
public static void main(String[] args) {
int TT;
TT = scan.nextInt();
for (int tt = 1; tt <= TT; tt++) {
input();
find();
}
}
static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public FastReader(String s) throws FileNotFoundException {
br = new BufferedReader(new FileReader(new File(s)));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
[문제풀이]
처음에 A의 배열을 순서대로 하나를 선택해 B 전체와 비교하였는데 시간초과 오류가 발생하였다.
그래서 다음에 이용한 풀이는 배열 B를 정렬하고 B를 정렬하면 좌우에 비슷한 값을 갖으므로 이러한 특성을 이용하여
이진탐색을 활용하였다.
'Koala - 9기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[Baekjoon / 백준] 8979 python 파이썬 올림픽 (0) | 2023.02.05 |
---|---|
[백준/Python] 2566번 최댓값 (0) | 2023.02.05 |
[백준/Python] 7523번 가우스 (1) | 2023.02.05 |
[백준/python] 10798번 : 세로읽기 (0) | 2023.02.05 |
[백준/python] 18406 (0) | 2023.02.05 |