잡동사니/[2022] 회로이론
[백준/C] 1920번 수 찾기 (이진 탐색)
heylo
2022. 12. 11. 02:57
https://www.acmicpc.net/problem/1920
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
이진탐색은 이미 소팅이 되어있어야 사용할 수 있다
C언어 내장함수 퀵 소트 함수 qsort를 이용하기 위해
compare 함수도 함께 선언하였다
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAX 100001
#define COMPARE(x, y) ( ((x) < (y)) ? -1 : ((x) == (y) ? 0: 1 ) )
int compare(const void* a, const void* b) // 비교함수: 뒷 수가 크면 -1, 같으면 0, 앞의 수가 크면 1
{
int num1 = *(int*)a;
int num2 = *(int*)b;
if (num1 < num2)
return -1;
if (num1 > num2)
return 1;
return 0;
}
int iterbinsearch(int list[], int find, int left, int right){
int middle;
while (left <= right) {
middle = (left + right) / 2;
int compareNum = COMPARE(list[middle], find);
if (compareNum == 0) {
printf("1\n");
return 0;
}
else if (compareNum > 0) {
right = middle - 1;
}
else if (compareNum < 0) {
left = middle + 1;
}
}
printf("0\n");
return 0;
}
int main(void) {
int i; // iteration
int N, numbers[MAX];
scanf("%d", &N);
for (i = 0; i < N; i++) {
scanf("%d", &numbers[i]);
}
qsort(numbers, N, sizeof(int), compare); // (정렬할 배열, 요소개수, 요소크기, 비교함수)
int M, search;
scanf("%d", &M);
for (i = 0; i < M; i++) {
scanf("%d", &search);
iterbinsearch(numbers, search, 0, N-1);
}
return 0;
}