문제: https://www.acmicpc.net/problem/1920
이진탐색을 사용하는 문제입니다.
사실 std::binary_search 을 사용하면 아주 짧고 간단하게 풀 수 있습니다. 하지만 이진탐색을 직접 만들어서 풀어보는 것도 좋을 것 같네요.
그리고 주의할 점은 cin 이 scanf 보다 시간복잡도가 높은데 cin 을 사용하면 시간 초과가 발생합니다.
마지막으로 이상한 점 하나는 제 코드 상에서의 compare 을 사용한 qsort 을 이용해서 정렬할 경우 오답처리가 됩니다. 그 이유는 아직 잘 모르겠네요....
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #pragma warning (disable:4996) #include <fstream> #include <iostream> #include <cstring> #include <climits> #include <algorithm> using namespace std; int binarySearch(const int* numbers, int target, int n) { int low = 0; int high = n - 1; while (low <= high) { int mid = (low + high) / 2; if (numbers[mid] > target) high = mid - 1; else if (target > numbers[mid]) low = mid + 1; else if (numbers[mid] == target) return 1; } return 0; } int compare(const void * a, const void * b) { return (*(int*)a - *(int*)b); } int main() { int n, m, num; scanf("%d", &n); int* numbers = new int[n]; for (int i = 0; i < n; i++) scanf("%d", &numbers[i]); //qsort(numbers, n, sizeof(int), compare); sort(numbers, numbers + n); scanf("%d", &m); for (int i = 0; i < m; i++) { scanf("%d", &num); printf("%d\n", binarySearch(numbers, num, n)); } delete[] numbers; return 0; } | cs |
'Algorithm, Data structure > Solved Algorithmic Problem' 카테고리의 다른 글
BAEKJOON 2869 - PUŽ (0) | 2016.12.26 |
---|---|
BAEKJOON 10815 - 숫자 카드 (0) | 2016.12.26 |
BAEKJOON 2193 - 이친수 (0) | 2016.12.25 |
BAEKJOON 1629 - 곱셈 (0) | 2016.12.24 |
BAEKJOON 2703 - Cryptoquote (0) | 2016.12.22 |