CodingTest Exam/[C++] Algorithm Study

42. 이분검색 (it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비) ★☆☆☆☆

HongongHB 2023. 7. 30. 22:12

#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	int n, m, low, high;
	scanf("%d %d", &n, &m);
	
	vector<int> num(n+1,0);
	
	for(int i = 1; i < num.size(); i++)
		scanf("%d", &num[i]);
	
	sort(num.begin(), num.end());
	low = 1;
	high = n;
	
	int mid = (low + high) / 2;
	while(num[mid] != m)
	{
		mid = (low + high) / 2;
		if(num[mid] > m)
			high = mid -1;
		else if(num[mid] < m)
			low = mid + 1;
	}
	
	printf("%d", mid);
	
	return 0;
}

1. 이분검색을 통한 특정 원소의 인덱스를 구하는 방법을 사용했다. 이분검색은 반드시 오름차순으로 정렬된 vector 나 배열에서 사용해야한다.

23 87 65 12 57 32 99 81

sort(num.begin(), num.end())

    low ↓                                                              mid  ↓  (3.5 => 3(int))                                                               high

12 23 32 57 65 81 87 99

32 < 57 이므로 high = mid + 1 = 4

 

    low ↓                                       mid  ↓  (2(int))                        high 

12 23 32 57 65 81 87 99

찾으려는 숫자를 찾았으므로 mid + 1 = 3

1을 더하는 이유는 3번째로 작은 수 이기 때문