Algorithm/BOJ
백준 1920번 C++
poopooreum
2023. 8. 2. 20:57
반응형
백준 1920번 수 찾기
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


정답 코드
#include <stdio.h>
#include <stdlib.h>
int static compare(const void* first, const void* second) {
if (*(int*)first > *(int*)second) return 1;
else if (*(int*)first < *(int*)second) return -1;
else return 0;
}
void result(int *arr, int n, int x) {
int min = 0, max = n - 1;
while (min <= max) {
int mid = (min + max) / 2;
if (arr[mid] == x) {
printf("%d\n", 1);
return;
}
else if (arr[mid] > x) max = mid - 1;
else min = mid + 1;
}
printf("%d\n", 0);
return;
}
int main() {
int n, m, num;
scanf("%d", &n);
int *arr= (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) scanf("%d", &arr[i]);
qsort(arr, n, sizeof(int), compare);
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d", &num);
result(arr,n,num);
}
return 0;
}
문제 풀이
이분 탐색을 이용해서 풀 수 있는 문제입니다. 메모리는 malloc함수를 이용해서 동적으로 할당을 하였고 qsort를 사용할 때 compare함수를 인위적으로 수정하였습니다.
반응형