이진 탐색 예제 - 1
Last updated
Last updated
n(수의 개수) m(탐색할 수의 개수)
A(수 데이터 리스트 저장)
A 리스트 정렬
target_list(탐색할 수 데이터 리스트 저장)
for m 반복:
target(찾아야 하는 수)
start(시작 인덱스)
end(종료 인덱스)
while 시작 인덱스 <= 종료 인덱스:
midIdx(중간 인덱스)
midVal(중앙값)
if 중앙값 > target:
종료 인덱스 = 중간 인덱스 - 1
elif 중앙값 < target:
시작 인덱스 = 중간 인덱스 + 1
else:
찾았음, 반복문 종료
if 찾았음:
1 출력
else:
0 출력n = int(input())
A = list(map(int, input().split()))
A.sort()
m = int(input())
target_list = list(map(int, input().split()))
for i in range(m):
find = False
target = target_list[i]
start = 0
end = n - 1
while start <= end:
midIdx = int((start + end) / 2)
midVal = A[midIdx]
if midVal > target:
end = midIdx - 1
elif midVal < target:
start = midIdx + 1
else:
find = True
break
if find:
print(1)
else:
print(0)import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
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());
int[] target_list = new int[m];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < m; i++) {
target_list[i] = Integer.parseInt(st.nextToken());
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < m; i++) {
boolean find = false;
int target = target_list[i];
int start = 0;
int end = n - 1;
while (start <= end) {
int midIdx = (start + end) / 2;
int midVal = arr[midIdx];
if (midVal > target) {
end = midIdx - 1;
} else if (midVal < target) {
start = midIdx + 1;
} else {
find = true;
break;
}
}
sb.append(find ? 1 : 0).append("\n");
}
System.out.println(sb);
}
}