인프런 알고리즘테스트 문제
42번 이분검색 알고리즘
풀스택 개발자
2020. 9. 18. 21:22
이분검색 사용x
#include<iostream>
#include<vector>
#include<string.h>
#include<string>
using namespace std;
int main()
{
int i, j;
int n;
int p;
int tmp = 0;
cin >> n >> p;
vector<int> arr(n);
for (i = 0; i < n; i++)
{
cin >> arr[i];
}
for (i = 1; i < n; i++)
{
tmp = arr[i];
for (j = i - 1; j >= 0; j--)
{
if (arr[j] > tmp)//arr[i]의 값이 이동할때마다 바뀌기 때문에 tmp에 저장해둔 값으로 비교
{
arr[j + 1] = arr[j];
}
else
{
break;
}
}
arr[j + 1] = tmp;
}
for (int i = 0; i < n; i++)
{
if (arr[i] == p)
{
cout << i+1;
break;
}
}
}
이분검색 알고리즘 사용
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int i, j;
int n;
int p;
int tmp = 0;
cin >> n >> p;
vector<int> arr(n);
for (i = 0; i < n; i++)
{
cin >> arr[i];
}
for (i = 1; i < n; i++)
{
tmp = arr[i];
for (j = i - 1; j >= 0; j--)
{
if (arr[j] > tmp)//arr[i]의 값이 이동할때마다 바뀌기 때문에 tmp에 저장해둔 값으로 비교
{
arr[j + 1] = arr[j];
}
else
{
break;
}
}
arr[j + 1] = tmp;
}
int fq=0;
int bq=n-1;
int mid;
while (fq <= bq)
{
mid = (fq + bq) / 2;
if (arr[mid] == p)
{
cout << mid + 1;
break;
}
else if (arr[mid]>p)
{
bq = mid - 1;
}
else if (arr[mid] < p)
{
fq = mid + 1;
}
}
}
sort 함수 사용
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int mid;
int fq;
int bq;
int p;
int N;
cin >> N >> p;
vector<int> arr(N);
for (int i = 0; i < N; i++)
{
cin >> arr[i];
}
sort(arr.begin(), arr.end());
fq = 0;
bq = N - 1;
while (fq <= bq)
{
mid = (fq + bq) / 2;
if (arr[mid] == p)
{
cout << mid + 1;
break;
}
else if (arr[mid] > p)
{
bq = mid - 1;
}
else if (arr[mid] < p)
{
fq = mid + 1;
}
}
}