[BOJ] 10816. 숫자 카드 2
15 Apr 2026
Reading time ~1 minute
풀이
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int [N];
for(int i = 0; i < N; i++)
arr[i] = sc.nextInt();
Arrays.sort(arr);
int M = sc.nextInt();
int[] targets = new int [M];
for(int i = 0; i < M; i++)
targets[i] = sc.nextInt();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < M; i++) {
int lower_index = lower_bound(arr, targets[i]);
int upper_index = upper_bound(arr, targets[i]);
sb.append(upper_index - lower_index + " ");
}
System.out.println(sb.toString());
}
public static int lower_bound(int[] arr, int target) {
int left = 0;
int right = arr.length;
while(left < right) {
int mid = left + right >>> 1;
if(arr[mid] >= target) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
public static int upper_bound(int[] arr, int target) {
int left = 0;
int right = arr.length;
while(left < right) {
int mid = left + right >>> 1;
if(arr[mid] <= target) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
}