틀린코드
#include<iostream>
#include<algorithm>
using namespace std;
int find_result(int* arr1,int find_num,int start,int end)
{
int count = 0;
int tmp;
while (start <= end)
{
int mid = (start + end)/2;
if (arr1[mid] == find_num)
{
count++;
tmp = mid+1;
while (tmp <end &&arr1[tmp] ==find_num)
{
count++;
tmp++;
}
tmp = mid -1;
while (0<= tmp && arr1[tmp] == find_num)
{
count++;
tmp--;
}
return (count);
}
else if (arr1[mid]>find_num)
end = mid - 1;
else
start=mid+1;
}
return (0);
}
int main()
{
ios ::sync_with_stdio(0);
cin.tie(0);
int input_num;
cin >> input_num;
int arr1[500001];
for (int i=0; i < input_num; i++)
cin >>arr1[i];
sort(arr1, arr1+input_num);
int n_input_num;
cin >>n_input_num;
int find_num;
int result = 0;
for (int i = 0; i < n_input_num; i++)
{
cin>>find_num;
result = find_result(arr1,find_num,0,input_num-1);
cout<<result<<" ";
}
cout << "\n";
}
이 문제는 내가 처음으로 2분탐색을 이용해서 문제를 풀어보려했는데 계속해서 오답을 줬다 그래서 나는결국
정답코드
#include <cstdio>
#define MAX 10000000
int A[MAX*2+1];
int main(){
int N,M,n;
scanf("%d",&N);
while(N--){
scanf("%d",&n);
A[n+MAX]++;
}
scanf("%d",&M);
while(M--){
scanf("%d",&n);
printf("%d ",A[n+MAX]);
}
}
결국 정답은 위와 같다.
728x90
'알고리즘 기초시절' 카테고리의 다른 글
백준 왕실의 나이트(C) 수학적 풀이, 완전 탐색적 풀 (0) | 2023.01.08 |
---|---|
백준 (C언어) (구현) 게임개발 -방향벡터 및 맵 탐색 (0) | 2023.01.08 |
백준 c++백준 1181번 단어정렬 (부제 :c++의 말도 안되는 편리함) (0) | 2023.01.05 |
백준 c++[백준 BOJ 10816번] 숫자 카드 2 (C++ ) (0) | 2023.01.05 |
백준 c++백준 11866번 요세푸스 문제 (0) | 2023.01.05 |