티스토리 뷰

728x90
반응형

수 찾기 문제는 빠른 정렬과 이진 탐색을 활용하는 문제입니다. N이 10만이기 때문에 NlogN의 시간복잡도를 가지는 정렬 알고리즘을 사용해야하며 탐색할 숫자의 개수도 10만이기 때문에 logM의 이진 탐색 알고리즘을 사용해야 합니다.

작성한 코드는 다음과 같습니다.


#include<stdio.h>

int N,M;
int number[100020];
int temp;

void quicksort(int low, int high) {
	if (low >= high) return;

	int pivot =	number[high];
	int index = low;
	int temp;

	for (int i = low;i<high; i++) {
		if (number[i] <= pivot) {
			temp = number[i];
			number[i] = number[index];
			number[index] = temp;
			index++;
		}
	}

	temp = number[index];
	number[index] = number[high];
	number[high] = temp;

	quicksort(low, index-1);
	quicksort(index + 1, high);
}

int binary_search(int num) {
	int high = N - 1;
	int low = 0;

	while (low <= high) {
		int mid = (low + high) / 2;
		if (number[mid] < num) {
			low = mid + 1;
		}
		else if (number[mid] > num) {
			high = mid - 1;
		}
		else {
			return 1;
		}
	}

	return -1;
}

int main(void) {
	scanf("%d", &N);

	for (int i = 0; i < N; i++) {
		scanf("%d", &number[i]);
	}

	quicksort(0, N - 1);

	scanf("%d", &M);

	for (int i = 0; i < M; i++) {
		scanf("%d", &temp);
		if (binary_search(temp) == 1) printf("%d\n", 1);
		else printf("0\n");
	}

}

문제의 지문은 다음 링크에서 확인할 수 있습니다.

https://www.acmicpc.net/problem/1920

728x90
반응형
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함