https://www.acmicpc.net/problem/1920
처음에 그냥 for문을 돌렸는데 시간초과가 발생하여 기준 배열을 정렬 후 이분탐색을 이용하여 구간을 나누고 문제를 풀었다.
import java.util.*;
import java.io.*;
public class Main1920 {
static int N, M;
static int [] nArr;
static int [] mArr;
static int largeN;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
nArr = new int [N];
largeN = 0;
for(int i = 0; i < N; i++){
int num = sc.nextInt();
nArr[i] = num;
largeN = Math.max(largeN, num);
}
Arrays.sort(nArr);
M = sc.nextInt();
mArr = new int[M];
StringBuilder sb = new StringBuilder();
for(int i = 0; i < M; i++){
mArr[i] = sc.nextInt();
}
for(int i = 0; i < M; i++){
if(mArr[i] < nArr[(N-1)/2]){
boolean flag = false;
for(int j = 0; j < (N-1)/2; j++){
if(mArr[i] == nArr[j]) {
flag = true;
break;
}
}
if(flag)
sb.append("1").append("\n");
else
sb.append("0").append("\n");
}
else if(mArr[i] == nArr[(N-1)/2]){
sb.append("1").append("\n");
}
else {
boolean flag = false;
for(int j = (N-1)/2+1; j < N; j++){
if(mArr[i] == nArr[j]) {
flag = true;
break;
}
}
if(flag)
sb.append("1").append("\n");
else
sb.append("0").append("\n");
}
}
sb.delete(sb.length()-1, sb.length());
System.out.print(sb.toString());
}
}
정렬, 이분탐색