알고리즘
백준 7795번 먹을 것인가 먹힐 것인가(JAVA)
박카스마시며코딩
2022. 2. 5. 14:22
https://www.acmicpc.net/problem/7795
7795번: 먹을 것인가 먹힐 것인가
심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을
www.acmicpc.net
저는 해당 문제를 이분탐색으로 문제를 해결하였습니다.
문제는 이분탐색 API를 쓸때 문제가 있었습니다. 같은 수가 존재할 때 어떤 값의 인덱스를 줄 지 모른다는 것입니다.
그래서 저는 찾았을 때는 제일 낮은 인덱스의 값이 나오도록 구현하였습니다.
package BOJ.ETC;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_7795 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
Function<String,Integer> stoi = Integer::parseInt;
int test = stoi.apply(st.nextToken());
for(int t = 0 ; t < test ; t++){
st = new StringTokenizer(br.readLine()," ");
int aSize = stoi.apply(st.nextToken());
int bSize = stoi.apply(st.nextToken());
int[] a = new int[aSize];
int[] b = new int[bSize];
st = new StringTokenizer(br.readLine()," ");
for(int i = 0 ; i < aSize ; i++){
a[i] = stoi.apply(st.nextToken());
}
st = new StringTokenizer(br.readLine()," ");
for(int i = 0 ; i < bSize ; i++){
b[i] = stoi.apply(st.nextToken());
}
Arrays.sort(a);
Arrays.sort(b);
int result = 0;
for(int i = 0 ; i < aSize ; i++){
int index = Arrays.binarySearch(b,a[i]);
// System.out.println(a[i]+" "+i+" "+index);
if(index < 0){
index = Math.abs(index) - 1;
}else{
for(int j = index -1; j >= 0 ; j--){
if(b[index] == b[j]){
index = j;
}else{
break;
}
}
}
result += index;
}
System.out.println(result);
}
}
}