본문 바로가기

Algorithm/[BOJ] - JAVA

[백준] 10815 : 숫자 카드 JAVA 풀이

 

1. N을 입력받음

2. N개의 수를 입력받고 int형 배열에 저장한 뒤 오름차순 정렬함

3. M을 입력받음

4. int배열과 찾아야 할 값인 target을 인자로 받아 이분탐색하는 함수를 작성함

     4-1. low = 0 , high = arr.length-1로 초기화함

     4-2. low<=high인 동안 아래 과정을 반복함

         4-2-1. mid = (low+high)/2를 계산함

         4-2-2. arr[mid] == target인 경우 1을 반환함

         4-2-3. 그렇지 않은 경우 low와 high의 값을 적절히 바꿔줌

    4-3. 4-2의 반복문이 끝날 때까지 함수가 1을 반환하지 않았다는 건,

            target이 arr에 없다는 뜻이므로 0을 반환함

5. 함수가 반환한 값을 출력함

 

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));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++){
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i=0;i<M;i++){
int t = Integer.parseInt(st.nextToken());
System.out.print(find(arr,t)+" ");
}
}
static int find(int[] arr, int target){
int low = 0;
int high = arr.length-1;
while(low<=high){
int mid = (low+high)/2;
if(arr[mid]==target){
return 1;
}
else if(arr[mid]>target){
high = mid-1;
}
else{
low = mid+1;
}
}
return 0;
}
}