임의의 N개의 숫자가 입력으로 주어집니다. N개의 수를 오름차순으로 정렬한 다음 N개의 수 중 한 개의 수인 M이 주어지면 이분검색으로 M이 정렬된 상태에서 몇 번째에 있는지 구하는 프로그램을 작성하세요.
첫 줄에 한 줄에 자연수 N(3<=N<=1,000,000)과 M이 주어집니다.
두 번째 줄에 N개의 수가 공백을 사이에 두고 주어집니다.
첫 줄에 정렬 후 M의 값의 위치 번호를 출력한다
내 풀이
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, m;
vector<int> v;
cin >> n>>m;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
v.push_back(x);
}
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); i++)
{
if (v[i] == m)
cout << i + 1;
}
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, key,lt=0,rt,mid;
cin >> n >> key;
vector<int> v(n);
for (int i = 0; i < v.size(); i++)
{
cin >> v[i];
}
sort(v.begin(), v.end());
rt = n - 1;
while (lt <= rt)
{
mid = (lt + rt) / 2;
if (v[mid] == key)
{
cout << mid + 1;
return 0;
}
else if (v[mid] > key)
rt = mid - 1;
else
lt = mid + 1;
}
}