[ ALGORITHM ]/[ 백 준 ]
[BAEKJOON] 1920번 : 수 찾기
HiStar__
2020. 8. 11. 15:32
문 제
소 스 코 드
#include<iostream>
#include<algorithm>
void SearchNumber();
bool SearchIndex(int *, const int&, const int&);
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
SearchNumber();
}
void SearchNumber() {
// input N
int N;
std::cin >> N;
// Sort & Arr
int *numbers{ new int[N] };
for (int i = 0; i < N; ++i) std::cin >> numbers[i];
std::sort(numbers, &numbers[N]);
int temp, num;
std::cin >> temp;
for (int i = 0; i < temp; ++i) {
std::cin >> num;
std::cout << SearchIndex(numbers, N, num) << '\n';
}
delete[] numbers;
}
bool SearchIndex(int * arr, const int& n, const int& num) {
int left{ 0 }, right{ n - 1 }, mid;
if ((num < arr[left])||(num > arr[right])) return false;
while (left <= right) {
mid = (left + right) / 2;
if (arr[mid] == num) return true;
else if (arr[mid] > num) right = mid - 1;
else left = mid + 1;
}
return false;
}
풀 이
-
이진 탐색을 통하여 구현.
더보기
배열이 오름차순이나 내림차순으로 정렬이 되어 있어야 적용이 가능하다.
N : 5 , arr[5] = { 4, 1, 5, 2, 3 } 4을 찾는다면,
먼저 배열을 오름차순으로 정렬한다. Algorithm Sort
arr[5] = { 1, 2, 3, 4, 5 }
left = 0, right = n - 1, mid = ( left + right ) / 2
arr[mid] < 4 임으로 left = mid + 1 = 3이 된다.
left = 3, right = 4, mid = (3 + 4) / 2 = 3이 된다.
arr[3] == 4이기 때문에 4는 arr배열에 존재한다.
-
STL Map 컨테이너를 이용한 간단한 구현.
#include<iostream>
#include<map>
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
std::map<int, int> numbers;
int N, temp;
std::cin >> N;
int num;
for (int i = 0; i < N; ++i) {
std::cin >> num;
numbers[num] = 1;
}
std::cin >> temp;
for (int i = 0; i < temp; ++i) {
std::cin >> num;
std::cout << numbers[num] << '\n';
}
}
출 력 값
문 제 출 처
문제 링크 :