메모리 초과 발생
재귀함수를 호출하지 않고 while문을 통해서 계속 돌도록 바꿔야할 거 같다.
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
int N = Integer.parseInt(br.readLine());
st= new StringTokenizer(br.readLine()," ");
int[] arr = new int[N];
for(int i=0;i<N;i++){
int n = Integer.parseInt(st.nextToken());
arr[i]=n;
}
Arrays.sort(arr);
int M = Integer.parseInt(br.readLine());
st= new StringTokenizer(br.readLine()," ");
for(int i=0;i<M;i++){
int m = Integer.parseInt(st.nextToken());
int result = Search(m,arr);
bw.write(Integer.toString(result)+"\n");
}
bw.flush();
bw.close();
br.close();
}
public static int Search(int n, int[] arr) {
int length = arr.length/2;
if(arr[length]==n) return 1;
else if(length==0 && arr[length]!=n) return 0;
else if(arr[length]>n) return Search(n, Arrays.copyOfRange(arr, 0, length));
else return Search(n, Arrays.copyOfRange(arr, length/2 + 1, arr.length ));
}
}
개선한 방법 재귀함수 이용하지 않음
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
int N = Integer.parseInt(br.readLine());
st= new StringTokenizer(br.readLine()," ");
int[] arr = new int[N];
for(int i=0;i<N;i++){
int n = Integer.parseInt(st.nextToken());
arr[i]=n;
}
Arrays.sort(arr);
int M = Integer.parseInt(br.readLine());
st= new StringTokenizer(br.readLine()," ");
for(int i=0;i<M;i++){
int m = Integer.parseInt(st.nextToken());
int result = Search(m,arr);
bw.write(Integer.toString(result)+"\n");
}
bw.flush();
bw.close();
br.close();
}
public static int Search(int n, int[] arr) {
int l =0;
int r = arr.length-1;
while(l<=r) {
int mid = (r+l)/2;
if(arr[mid]==n) return 1;
else if(arr[mid]>n) r = mid-1;
else l = mid+1;
}
return 0;
}
}