[문제보기]
1920. 수 찾기
1920번: 수 찾기
첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안��
www.acmicpc.net
[풀이과정]
이 문제는 이분탐색 관련한 문제로, 그냥 for문을 통해 탐색을 한다면 시간초과가 나오는 문제이다.
먼저 전처리 과정으로 입력값을 sort()함수를 이용하여 정렬을 하고 난 뒤 이분탐색을 진행한다.
solution(int x)가 이분탐색을 하는 함수로, start, end, mid 변수를 사용하여 이분탐색 연산을 진행한다.
[소스코드]
#include <iostream>
#include <algorithm>
using namespace std;
int array[100001] = {0};
int n, m;
void solution(int x){
int start = 0;
int end = n-1;
int mid;
while(end - start >= 0){
mid = (start+end)/2;
if(array[mid] == x){
cout << "1\n";
return;
}
else if(array[mid] > x){
end = mid - 1;
}
else{
start = mid + 1;
}
}
cout << "0\n";
return;
}
int main(){
cin.tie(0);
cout.sync_with_stdio(false);
cin >> n;
for(int i=0; i<n; i++){
cin >> array[i];
}
sort(array, array+n);
cin >> m;
int x;
for(int i=0; i<m; i++){
cin >> x;
solution(x);
}
return 0;
}
[해결 과정 중 실수한 부분]
'알고리즘 스터디 > Beakjoon' 카테고리의 다른 글
| [백준 17837][C++] 새로운 게임2 (Gold 2) (0) | 2020.09.18 |
|---|---|
| [백준 17143][C++] 낚시왕 (Gold 2) (0) | 2020.09.17 |
| [백준 1463][C++] 1로 만들기 (Silver 3) (0) | 2020.09.12 |
| [백준 11052][C++] 카드 구매하기 (Silver 1) (0) | 2020.09.09 |
| [백준 10844][C++] 쉬운 계단 수 (Silver 1) (0) | 2020.09.07 |