https://www.acmicpc.net/problem/7795
접근 :
- a 집합과 b 집합을 오름차순으로 정렬한다.
- a 와 b 에서 하나씩 꺼내서 비교한다. 만약 a 가 작다면 a가 현재 b보다 클 때까지 다음 수를 꺼낸다.
- 만약 a가 b 보다 큰 경우에는 정답의 갯수를 a 의 전체 갯수 - 현재 인덱스 로 더한다.
- a 와 b 둘 중 한 집합의 원소를 모두 꺼낼 때 까지 반복 후 결과를 출력한다.
코드구현 :
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
for(int i = 0 ; i < t ; i++){
int answer = 0;
String[] temp = br.readLine().split(" ");
int n = Integer.parseInt(temp[0]);
int m = Integer.parseInt(temp[1]);
List<Integer> a = new ArrayList<>();
List<Integer> b = new ArrayList<>();
String[] temp_a = br.readLine().split(" ");
String[] temp_b = br.readLine().split(" ");
for(int j = 0 ; j < n; j ++) a.add(Integer.parseInt(temp_a[j]));
for(int k = 0 ; k < m; k ++) b.add(Integer.parseInt(temp_b[k]));
Collections.sort(a);
Collections.sort(b);
int flag_a = 0;
int flag_b = 0;
while(flag_a < a.size() && flag_b < b.size()){
//a 가 큰 경우 정답의 갯수를 올리고 다음 b를 가져옴
if(a.get(flag_a) > b.get(flag_b)){
answer += (a.size() - flag_a);
flag_b++;
continue;
}
flag_a++;
}
sb.append(answer).append('\n');
}
System.out.println(sb.toString());
br.close();
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 백준 2805 나무 자르기_이분탐색 (1) | 2024.06.03 |
---|---|
[JAVA] 백준 2470 두 용액_투포인터 (1) | 2024.06.03 |
[JAVA] 백준 과제는 끝나지 않아!_스택 (0) | 2024.05.31 |
[JAVA] 프로그래머스 연습 징검다리 (0) | 2024.05.30 |
[JAVA] 백준 19583 싸이버 개강총회 (0) | 2024.05.29 |